From: Richard B. <rb...@us...> - 2004-12-23 01:14:54
|
Update of /cvsroot/jcframework/dotnet In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4258 Modified Files: AToMSFramework.vbproj AssemblyInfo.vb CConnection.vb Added Files: COracleDatabase.vb Log Message: Added specific support for Oracle databases - needs testing Changed version number to 2.1.0.0 Index: AToMSFramework.vbproj =================================================================== RCS file: /cvsroot/jcframework/dotnet/AToMSFramework.vbproj,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- AToMSFramework.vbproj 15 Dec 2004 23:46:04 -0000 1.20 +++ AToMSFramework.vbproj 23 Dec 2004 01:14:44 -0000 1.21 @@ -82,6 +82,11 @@ AssemblyName = "ByteFX.MySqlClient" HintPath = "..\ByteFX.MySqlClient.76.NI\ByteFX.MySqlClient.dll" /> + <Reference + Name = "System.Data.OracleClient" + AssemblyName = "System.Data.OracleClient" + HintPath = "..\..\..\WINDOWS\Microsoft.NET\Framework\v1.1.4322\System.Data.OracleClient.dll" + /> </References> <Imports> <Import Namespace = "Microsoft.VisualBasic" /> @@ -269,6 +274,11 @@ BuildAction = "Compile" /> <File + RelPath = "COracleDatabase.vb" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "COrderEntry.vb" SubType = "Code" BuildAction = "Compile" Index: CConnection.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/CConnection.vb,v retrieving revision 1.29 retrieving revision 1.30 diff -u -d -r1.29 -r1.30 --- CConnection.vb 16 Nov 2004 21:39:34 -0000 1.29 +++ CConnection.vb 23 Dec 2004 01:14:44 -0000 1.30 @@ -5,6 +5,7 @@ Imports System.Data.SqlClient Imports ByteFX.Data.MySqlClient Imports System.Data.Odbc +Imports System.Data.OracleClient '''----------------------------------------------------------------------------- ''' <summary> @@ -2051,3 +2052,455 @@ Dispose(False) End Sub End Class + +'''----------------------------------------------------------------------------- +''' Project : AToMSFramework +''' Class : COracleConnection +''' +'''----------------------------------------------------------------------------- +''' <summary> +''' Connection class for Oracle data sources +''' </summary> +''' <remarks><para>This class implements the <see cref="T:AToMSFramework._CConnection"/> interface and is used +''' to manage connections to Oracle datasources.</para> +''' <para>The following should be taken into consideration when using this +''' class:</para> +''' <para>1. Only one physical transaction runs on a database connection at any one time</para> +''' <para>2. Only one physical connection to the database exists. Multiple connection +''' objects will share a connection where possible</para> +''' <para>3. If nested transactions are started, the commit or rollback only occurs on the +''' first transaction created. A rollback on any nested transaction will cause all +''' outside transactions to also roll back.</para> +''' </remarks> +''' <seealso cref="T:AToMSFramework._CConnection"/> +''' <history> +''' [rbanks] 23/12/2004 Created +''' </history> +'''----------------------------------------------------------------------------- +Public Class COracleConnection + Implements _CConnection + Implements IDisposable + + Private m_connection As OracleConnection + Private m_autoCommit As Boolean + Private m_started As Boolean + Private m_manageTransactions As Boolean + Private m_transaction As OracleTransaction + Private m_transactioncalls As Integer + Private m_references As Integer + Private m_db As _CRelationalDatabase + Private Const DEBUG_MODE As Boolean = True + Private m_disposed As Boolean + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' The actual Oracle connection for the object. + ''' </summary> + ''' <value></value> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Property Connection() As OracleConnection + Get + Connection = m_connection + End Get + Set(ByVal Value As OracleConnection) + m_connection = Value + End Set + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="P:AToMSFramework._CConnection.AutoCommit">_CConnection</see>. + ''' </summary> + ''' <value></value> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Property AutoCommit() As Boolean Implements _CConnection.AutoCommit + Get + AutoCommit = m_autoCommit + End Get + Set(ByVal Value As Boolean) + m_autoCommit = Value + End Set + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="P:AToMSFramework._CConnection.Started">_CConnection</see>. + ''' </summary> + ''' <value></value> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Property Started() As Boolean Implements _CConnection.Started + Get + Started = m_started + End Get + Set(ByVal Value As Boolean) + m_started = Value + End Set + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="P:AToMSFramework._CConnection.ManageTransactions">_CConnection</see>. + ''' </summary> + ''' <value></value> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Property ManageTransactions() As Boolean Implements _CConnection.ManageTransactions + Get + ManageTransactions = m_manageTransactions + End Get + Set(ByVal Value As Boolean) + m_manageTransactions = Value + End Set + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="M:AToMSFramework._CConnection.commit">_CConnection</see>. + ''' </summary> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Sub commit() Implements _CConnection.commit + If DEBUG_MODE Then + If m_transactioncalls = 1 Then + System.Diagnostics.Debug.WriteLine("COMMIT TRANSACTION") + Else + System.Diagnostics.Debug.WriteLine("Nested COMMIT TRANSACTION - not actually called") + End If + End If + If Me.ManageTransactions Then + If m_transactioncalls = 1 Then + m_transaction.Commit() + getPersistenceBrokerInstance().commitCache(Me.Database) + Me.Started = False + m_transaction = Nothing + End If + m_transactioncalls -= 1 + End If + End Sub + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' The current transaction for the connection. + ''' </summary> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public ReadOnly Property Transaction() As OracleTransaction + Get + Transaction = m_transaction + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="M:AToMSFramework._CConnection.startTransaction">_CConnection</see>. + ''' </summary> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Overloads Sub startTransaction() Implements _CConnection.startTransaction + If DEBUG_MODE Then + If m_transactioncalls = 0 Then + System.Diagnostics.Debug.WriteLine("BEGIN TRANSACTION") + Else + System.Diagnostics.Debug.WriteLine("Nested BEGIN TRANSACTION - not actually called") + End If + End If + If Me.ManageTransactions Then + If Not Me.Started Then + m_transaction = m_connection.BeginTransaction + End If + m_transactioncalls += 1 + Me.Started = True + End If + End Sub + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="M:AToMSFramework._CConnection.processStatement">_CConnection</see>. + ''' </summary> + ''' <param name="statement"></param> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Sub processStatement(ByVal statement As CSqlStatement) Implements _CConnection.processStatement + Dim m_command As New OracleCommand + Dim m_recordcount As Integer + Dim cp As CSQLParameter + Dim param As OracleParameter + Dim dd As Date + + Try + m_command.Connection = m_connection + m_command.CommandText = statement.SqlString + For Each cp In statement.Parameters + If Not cp.Ignore Then + param = New OracleParameter + param.ParameterName = cp.Name + param.OracleType = CType(cp.Column.ProviderType, OracleType) + param.Value = cp.Value + m_command.Parameters.Add(param) + End If + Next + m_command.Transaction = m_transaction + Debug.WriteLine(m_command.CommandText) + m_recordcount = m_command.ExecuteNonQuery() + If m_recordcount = 0 Then + Throw New NothingUpdatedException("No records were affected by the update") + End If + Catch err As OracleException + Throw err + Catch err As Exception + Throw err + End Try + End Sub + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="M:AToMSFramework._CConnection.processSelectStatement">_CConnection</see>. + ''' </summary> + ''' <param name="statement"></param> + ''' <returns></returns> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Function processSelectStatement(ByVal statement As CSqlStatement) As CResultset Implements _CConnection.processSelectStatement + SyncLock GetType(COracleConnection) + Dim x As RetrieveException + Dim rs As New CResultset + Dim param As OracleParameter + Dim dd As Date + Dim m_command As New OracleCommand + + If DEBUG_MODE Then + System.Diagnostics.Debug.WriteLine(statement.SqlString) + End If + + m_command.Connection = m_connection + m_command.CommandText = statement.SqlString + For Each cp As CSQLParameter In statement.Parameters + If Not cp.Ignore Then + param = New OracleParameter + param.ParameterName = cp.Name + param.OracleType = CType(cp.Column.ProviderType, OracleType) + param.Value = cp.Value + m_command.Parameters.Add(param) + End If + Next + + Try + Dim m_adapter As New OracleDataAdapter(m_command) + If m_transactioncalls > 0 Then m_adapter.SelectCommand.Transaction = m_transaction + m_adapter.Fill(rs.ResultSet, "ole") + m_adapter.Dispose() + Catch err As OracleException + x = New RetrieveException("Oracle Error: " & err.Message, err) + Catch err As Exception + x = New RetrieveException(err.Message, err) + End Try + If Not x Is Nothing Then + Throw x + End If + processSelectStatement = rs + End SyncLock + End Function + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="M:AToMSFramework._CConnection.rollback">_CConnection</see>. + ''' </summary> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Sub rollback() Implements _CConnection.rollback + Dim pb As CPersistenceBroker + If DEBUG_MODE Then + If m_transactioncalls = 1 Then + System.Diagnostics.Debug.WriteLine("ROLLBACK TRANSACTION") + Else + System.Diagnostics.Debug.WriteLine("Nested ROLLBACK TRANSACTION - not actually performed") + End If + End If + If Me.ManageTransactions Then + If m_transactioncalls = 1 Then + Try + m_transaction.Rollback() + getPersistenceBrokerInstance().rollbackCache(Me) + Catch ex As Exception + End Try + Me.Started = False + m_transaction = Nothing + End If + m_transactioncalls -= 1 + End If + End Sub + + Public Sub New() + MyBase.New() + 'By default we manage tranactions + 'For DB's that do not manage transactions we should + 'set this attribute to false + m_manageTransactions = True + m_references = 0 + End Sub + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="M:AToMSFramework._CConnection.CloseConnection">_CConnection</see>. + ''' </summary> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Sub CloseConnection() Implements _CConnection.CloseConnection + m_references -= 1 + If m_references = 0 Then + m_connection.Close() + End If + End Sub + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="P:AToMSFramework._CConnection.IsClosed">_CConnection</see>. + ''' </summary> + ''' <value></value> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public ReadOnly Property IsClosed() As Boolean Implements _CConnection.IsClosed + Get + Return m_connection.State = ConnectionState.Closed + End Get + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="P:AToMSFramework._CConnection.ReferenceCount">_CConnection</see>. + ''' </summary> + ''' <value></value> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Property ReferenceCount() As Integer Implements _CConnection.ReferenceCount + Get + Return m_references + End Get + Set(ByVal Value As Integer) + m_references = Value + End Set + End Property + + '''----------------------------------------------------------------------------- + ''' <summary> + ''' See <see cref="P:AToMSFramework._CConnection.getTableSchema">_CConnection</see>. + ''' </summary> + ''' <param name="tName"></param> + ''' <returns></returns> + ''' <remarks></remarks> + ''' <history> + ''' [rbanks] 23/12/2004 Created + ''' </history> + '''----------------------------------------------------------------------------- + Public Function getTableSchema(ByVal tName As String) As System.Data.DataTable Implements _CConnection.getTableSchema + Dim statement As String + Dim cmd As OracleCommand + Dim dr As OracleDataReader + Dim dt As DataTable + + statement = "select * from " & tName + Try + cmd = New OracleCommand(statement, Me.Connection) + dr = cmd.ExecuteReader(CommandBehavior.SchemaOnly) + dt = dr.GetSchemaTable + Catch ex As Exception + dt = Nothing + Throw ex + End Try + Return dt + End Function + + Public Overloads Sub startTransaction(ByVal isolationLevel As System.Data.IsolationLevel) Implements _CConnection.startTransaction + If DEBUG_MODE Then + If m_transactioncalls = 0 Then + System.Diagnostics.Debug.WriteLine("BEGIN TRANSACTION") + Else + System.Diagnostics.Debug.WriteLine("Nested BEGIN TRANSACTION - not actually called") + End If + End If + If Me.ManageTransactions Then + If Not Me.Started Then + m_transaction = m_connection.BeginTransaction(isolationLevel) + End If + m_transactioncalls += 1 + Me.Started = True + End If + End Sub + + Public Property Database() As _CRelationalDatabase Implements _CConnection.Database + Get + Return m_db + End Get + Set(ByVal Value As _CRelationalDatabase) + m_db = Value + End Set + End Property + + Public Overloads Sub Dispose() Implements System.IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + Protected Overridable Overloads Sub Dispose(ByVal disposing As Boolean) + If Not m_disposed Then + If disposing Then + If Me.Started AndAlso Not m_transaction Is Nothing Then + m_transaction.Rollback() + m_transaction = Nothing + End If + If Not m_connection Is Nothing Then + m_connection.Close() + m_connection.Dispose() + m_connection = Nothing + End If + m_db = Nothing + m_disposed = True + End If + End If + End Sub + + Protected Overrides Sub Finalize() + ' Simply call Dispose(False). + Dispose(False) + End Sub +End Class --- NEW FILE: COracleDatabase.vb --- Option Strict Off Option Explicit On Imports System.Data.OracleClient '''----------------------------------------------------------------------------- ''' Project : AToMSFramework ''' Class : COracleDatabase ''' '''----------------------------------------------------------------------------- ''' <summary> ''' Implementation of CRelationalDatabase for Oracle Database Servers. ''' </summary> ''' <remarks>This class contains the specific functionality required for the ''' framework to interact with oracle databases.</remarks> ''' <history> ''' [rbanks] 11/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- Public Class COracleDatabase Inherits CRelationalDatabase Private m_user As String Private m_password As String Private m_serverName As String '''----------------------------------------------------------------------------- ''' <summary> ''' Establishes a new database connection. ''' </summary> ''' <returns>A COracleConnection containing the newly established connection.</returns> ''' <remarks>The COracleConnection class implements the _CConnection interface which ''' is required by this method. ''' <para>If the connection cannot be established an exception will be thrown.</para> ''' <history> ''' [rbanks] 23/12/2004 Created ''' </history> '''----------------------------------------------------------------------------- Public Overrides Function getNewConnection() As _CConnection Dim conn As New COracleConnection conn.Connection = New OracleConnection conn.ManageTransactions = True Try If m_user Is Nothing OrElse m_user.Length = 0 Then m_user = "" m_password = "" Dim pbroker As CPersistenceBroker pbroker = getOrSetPBInstance(pbroker) pbroker.GetLoginDetails(Me, m_user, m_password) End If If m_user = "SSPI" Then conn.Connection.ConnectionString = _ "Data Source=" & m_serverName & ";" & _ "Integrated Security=true;" & _ "Persist Security Info=False;" Else conn.Connection.ConnectionString = _ "Data Source=" & m_serverName & ";" & _ "Integrated Security=false;" & _ "Persist Security Info=False;" & _ "User Id=" & m_user & ";" & _ "Password=" & m_password End If conn.Connection.Open() Catch ex As OracleClient.OracleException Throw New DatabaseConnectionException(ex.Message, ex) Catch ex As Exception Throw New DatabaseConnectionException(ex.Message, ex) End Try getNewConnection = conn End Function '''----------------------------------------------------------------------------- ''' <summary> ''' Sets the initial properties of the database. ''' </summary> ''' <param name="properties">The property information supplied in the XML mapping file.</param> ''' <remarks>In order to initialise the database object properly the following must be supplied ''' <list type="bullet"> ''' <item><description>ServerName: The name of the database server</description></item> ''' <item><description>User: The user name for secured databases. Use SSPI to suppply a user at runtime</description></item> ''' <item><description>Password: The password for secured databases.</description></item> ''' <item><description>OIDTable: The table name containing the OID A-value. Can be ignored if OIDs are not used.</description></item> ''' </list> ''' <para>If the database is used without having been properly initialised you are likely ''' to get exceptions thrown in your application.</para> ''' </remarks> ''' <history> ''' [rbanks] 23/12/2004 Created ''' </history> '''----------------------------------------------------------------------------- Public Overrides Sub init(ByVal properties As System.Collections.Specialized.HybridDictionary) m_serverName = properties.Item("serverName") m_user = properties.Item("user") m_password = properties.Item("password") If properties.Item("ansinulls") Is Nothing Then UseANSINulls = False Else UseANSINulls = properties.Item("ansinulls") End If MyBase.OIDTable = properties.Item("OIDTable") End Sub '''----------------------------------------------------------------------------- ''' <summary> ''' Gets the value of an object in a format the database can understand. ''' </summary> ''' <param name="tempValue">The object being evaluated.</param> ''' <returns>A string containing the SQL compatible value for the object</returns> ''' <remarks>The following rules are applied when converting object values into ''' database compatible strings ''' <para>Any value that is a Null Alias <see cref="M:AToMSFramework.ModAliasNull.IsNullAlias"/> ''' will be returned as NULL.</para> ''' <para>Strings are enclosed in single quotes. If the string is already enclosed in single quotes then ''' nothing is changed. Also, any single quotes within the string are converted to a pair of single quotes.</para> ''' <para>Dates are converted to yyyy-MM-dd HH:mm:ss format and enclosed in single quotes. If a datetime field ''' only has a time value, then a time-only string is returned instead.</para> ''' <para>Booleans are converted to 1 or 0</para> ''' <para>Numbers are converted to strings directly.</para> ''' <para>Objects that are nothing return a NULL and all other objects are directly converted to strings using their ''' inbuilt ToString methods.</para></remarks> ''' <history> ''' [rbanks] 11/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- Public Overrides Function getValueFor(ByVal tempValue As Object) As String Dim tempRetorno As String Dim dd As DateTime Dim OriginalCulture As System.Globalization.CultureInfo Dim TempCulture As System.Globalization.CultureInfo If IsNullAlias(tempValue) Then Return "NULL" Else Select Case VarType(tempValue) Case VariantType.String If Left(tempValue, 1) = "'" And Right(tempValue, 1) = "'" And CStr(tempValue).Length > 2 Then 'string already enclosed in quotes so ignore tempRetorno = tempValue Else 'replace single quote with double quote, and enclose entire string in quotes tempRetorno = "'" & Replace(tempValue, "'", "''") & "'" End If Case VariantType.Date TempCulture = New System.Globalization.CultureInfo("en-US") OriginalCulture = System.Threading.Thread.CurrentThread.CurrentCulture System.Threading.Thread.CurrentThread.CurrentCulture = TempCulture System.Threading.Thread.CurrentThread.CurrentUICulture = TempCulture dd = CType(tempValue, DateTime) If dd = Date.MinValue Then tempRetorno = "NULL" Else If dd.Date.Ticks = 0 Then 'MSSQL doesn't support dates with years less than 1753, so time only 'values that format to "0001-01-01 11:23:00" for example produce errors. 'If it's just a time we will only return time portion. tempRetorno = "'" & dd.ToString("HH:mm:ss") & "'" Else tempRetorno = "'" & dd.ToString("yyyy-MM-dd HH:mm:ss") & "'" End If End If System.Threading.Thread.CurrentThread.CurrentCulture = OriginalCulture System.Threading.Thread.CurrentThread.CurrentUICulture = OriginalCulture Case VariantType.Boolean tempRetorno = IIf(tempValue, "1", "0") Case VariantType.Single, VariantType.Double, VariantType.Decimal, VariantType.Decimal tempRetorno = tempValue.ToString Case Else tempRetorno = tempValue End Select End If getValueFor = tempRetorno End Function '''----------------------------------------------------------------------------- ''' <summary> ''' Gets the next OID A-Value from the database. ''' </summary> ''' <returns>A integer containing the A-Value.</returns> ''' <remarks>A connection is established to the database and the OIDTable (specified in ''' the XML mapping) is queried and updated. The obtained A-Value is returned. ''' <para>Should an error occur a value of 0 will be returned.</para></remarks> ''' <history> ''' [rbanks] 11/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- Public Overrides Function getNextOIDAvalue() As Integer Dim rs As New DataSet Dim da As New OracleDataAdapter Dim cb As OracleCommandBuilder Dim aValue As Integer Dim row As System.Data.DataRow Dim p As OracleParameter Dim initvals() As Object = {1} Dim x As OIDException Dim conn As COracleConnection conn = Me.getConnection(Nothing) conn.AutoCommit = False conn.startTransaction() Try da.SelectCommand = New OracleCommand("select oidAValue from " & Me.OIDTable, conn.Connection, conn.Transaction) cb = New OracleCommandBuilder(da) da.Fill(rs, "oid") If rs.Tables(0).Rows.Count = 0 Then 'Seed with value = 1 row = rs.Tables(0).Rows.Add(initvals) aValue = 1 Else rs.Tables(0).Rows(0).Item(0) += 1 aValue = rs.Tables(0).Rows(0).Item(0) End If da.Update(rs, "oid") da.Dispose() conn.commit() Catch err As OracleException conn.rollback() x = New OIDException(err.Message, err) Catch err As Exception conn.rollback() x = New OIDException(err.Message, err) Finally Me.freeConnection(conn) If Not x Is Nothing Then Throw x End If End Try Return aValue End Function '''----------------------------------------------------------------------------- ''' <summary> ''' Method to get the last Identity value for the connection. ''' </summary> ''' <param name="conn">The connection to use.</param> ''' <returns>An integer containing the value of the last updated identity column</returns> ''' <remarks>If multiple identity columns were updated the return value will only contain ''' the value of the last identity column updated. ''' <para>Identity values are retrieved by querying the @@IDENTITY value.</para> ''' <para>Should an error occur an exception will be thrown.</para></remarks> ''' <history> ''' [rbanks] 11/12/2003 Created ''' </history> '''----------------------------------------------------------------------------- Public Overrides Function getIdentityValue(ByVal conn As _CConnection) As Integer Dim rs As New DataSet Dim da As New OracleDataAdapter Dim cb As OracleCommandBuilder Dim aValue As Integer Dim connection As COracleConnection connection = conn connection.AutoCommit = False Try da.SelectCommand = New OracleCommand("select @@IDENTITY", connection.Connection, connection.Transaction) cb = New OracleCommandBuilder(da) da.Fill(rs, "identity") If rs.Tables(0).Rows.Count = 0 Then Throw New IdentityValueException("Could not retrieve identity value") Else If IsDBNull(rs.Tables(0).Rows(0).Item(0)) Then aValue = 0 Else aValue = rs.Tables(0).Rows(0).Item(0) End If Debug.WriteLine("Returned Identity value: " & aValue.ToString) End If da.Dispose() Catch err As OracleException Throw New IdentityValueException(err.Message, err) End Try Return aValue End Function '''----------------------------------------------------------------------------- ''' <summary> ''' Returns the SQL syntax placeholder for a parameter ''' </summary> ''' <param name="i">The number of the parameter being added</param> ''' <returns>A string containing the oracle parameter placeholder</returns> ''' <remarks>Since the parameter is for an Oracle connection only a the returned ''' string is in the format of :pxxx where xxx is the value of the input integer (i).</remarks> ''' <history> ''' [rbanks] 23/01/2004 Created ''' </history> '''----------------------------------------------------------------------------- Public Overrides Function getParamHolder(ByVal i As Integer) As String Return ":p" & CStr(i) End Function Public Overrides Function limitClauseAtStart() As Boolean Return True End Function Public Overrides Function getClauseStringLimit() As String Return "TOP" End Function Public Overrides Function getClauseStringTableAlias(ByVal table As String, ByVal owner As String, ByVal pAlias As String) As String Return owner & "." & table & " as " & pAlias End Function Public Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If Not m_disposed Then If disposing Then Dim conn As COracleConnection While ConnectionPool.Count > 0 conn = ConnectionPool.Pop conn.Dispose() End While m_disposed = True End If End If End Sub End Class Index: AssemblyInfo.vb =================================================================== RCS file: /cvsroot/jcframework/dotnet/AssemblyInfo.vb,v retrieving revision 1.13 retrieving revision 1.14 diff -u -d -r1.13 -r1.14 --- AssemblyInfo.vb 19 Oct 2004 03:32:08 -0000 1.13 +++ AssemblyInfo.vb 23 Dec 2004 01:14:44 -0000 1.14 @@ -25,7 +25,7 @@ ' by using the '*' as shown below -<Assembly: AssemblyVersion("2.0.0.0")> +<Assembly: AssemblyVersion("2.1.0.0")> ''' ----------------------------------------------------------------------------- ''' Project : AToMSFramework |