Follow up with some code. Here is a function I have in a DataAccessLayer(DAL) Class for one of my solutions/implementations that integrates a non-spatial SQLServer2005 database that is basically acting as complex attribtutes for a parcel layer. This particular function is updating that non-spatial SQLServer database (which again is related to parcels by way of the "GISPID" or "PID" fields). What you'll see here is that I am passing in a DataTable "inDT" which is then used in the DataAdapter.Update(inDT) method. What is important to note is that the SELECT Command of the DataAdapter produces what is found in the DataTable being passed in.You'll also see that I have manually setup the INSERT/UPDATE/SELECT/DELETE Commands because I am utilizing StoredProcedures I have written specifically for each of those Commands. The ADO.NET DataSet/DataTable keeps track of any modifications you make to it, so if you are doing updates/deletes on the DataTable the .Update on the DataAdapter will handle updating the database.Anyway, this is for SQLServer I know, but shouldn't be that much different for Oracle and you'll just need to setup your DataAdapter a bit differently (as I've already posted above).The main reason why all of this might be faster doing the updating is because of as agray1 mentioned: no need to Start/Stop and Edit Session. Again this all hinges on simply updating attributes and not the features themselves though!Good Luck, hope this helps.Public Function UpdateIgnoreRecs(ByVal inDT As DataTable) As DataTable
Dim Selcmd As SqlCommand = New SqlCommand()
Selcmd.CommandText = "Storms_Excps_IgnoreRec_Get"
Selcmd.CommandType = CommandType.StoredProcedure
'setup INSERT Command for DataAdapter
Dim ins_Cmd As SqlCommand = New SqlCommand()
ins_Cmd.CommandText = "sido.Storms_Excps_InsertIgnoreRec"
ins_Cmd.CommandType = CommandType.StoredProcedure
ins_Cmd.Parameters.Add("@ParcelID", SqlDbType.NVarChar, 15, "ParcelID")
ins_Cmd.Parameters.Add("@ExcpType", SqlDbType.NVarChar, 50, "ExcpType")
ins_Cmd.Connection = Me.sqlCn
Dim paramPkIDupd As New SqlParameter()
paramPkIDupd.ParameterName = "@PkID"
paramPkIDupd.SqlDbType = SqlDbType.Int
paramPkIDupd.Direction = ParameterDirection.Input
paramPkIDupd.SourceColumn = "PkID"
paramPkIDupd.SourceVersion = DataRowVersion.Original
'setup UPDATE Command for DataAdapter
Dim upd_Cmd As SqlCommand = New SqlCommand()
upd_Cmd.CommandText = "sido.Storms_Excps_UpdateIgnoreRec"
upd_Cmd.CommandType = CommandType.StoredProcedure
upd_Cmd.Parameters.Add("@ParcelID", SqlDbType.NVarChar, 15, "ParcelID")
upd_Cmd.Parameters.Add("@ExcpType", SqlDbType.NVarChar, 50, "ExcpType")
upd_Cmd.Parameters.Add(paramPkIDupd)
upd_Cmd.Connection = Me.sqlCn
paramPkIDupd = New SqlParameter()
paramPkIDupd.ParameterName = "@PkID"
paramPkIDupd.SqlDbType = SqlDbType.Int
paramPkIDupd.Direction = ParameterDirection.Input
paramPkIDupd.SourceColumn = "PkID"
paramPkIDupd.SourceVersion = DataRowVersion.Original
'setup DELETE Command
Dim del_Cmd As SqlCommand = New SqlCommand()
del_Cmd.CommandText = "sido.Storms_Excps_DeleteIgnoreRec"
del_Cmd.CommandType = CommandType.StoredProcedure
del_Cmd.Parameters.Add("@ParcelID", SqlDbType.NVarChar, 15, "ParcelID")
del_Cmd.Parameters.Add("@ExcpType", SqlDbType.NVarChar, 50, "ExcpType")
del_Cmd.Parameters.Add(paramPkIDupd)
del_Cmd.Connection = Me.sqlCn
Dim ds As New DataSet()
Dim da As New SqlDataAdapter
da.SelectCommand = Selcmd
da.UpdateCommand = upd_Cmd
da.InsertCommand = ins_Cmd
da.DeleteCommand = del_Cmd
Try
Using Selcmd
Selcmd.Connection = Me.sqlCn
da.Fill(ds)
End Using
Dim rct As Integer = CInt(ds.Tables(0).Rows.Count)
da.Update(inDT)
rct = CInt(ds.Tables(0).Rows.Count)
Me.CloseConnection()
da.Dispose()
connSvc.Dispose()
Return ds.Tables(0)
Catch ex As Exception
MsgBox(ex.ToString)
connSvc.Dispose()
Return Nothing
End Try
End Function