private void button2_Click_2(object sender, EventArgs e) { string connectionString = connStr.Text.Trim(); try { using (SAConnection conn = new SAConnection(connectionString)) //DataSet tester { DTAcctLog.Rows.Clear(); //doesn't affect the update. conn.Open(); //open connection from using block SADataAdapter da = new SADataAdapter("Select * from acctlog", conn); //create a new data adapter. I don't know what's special about this. SACommandBuilder cb = new SACommandBuilder(da); cb.ConflictOption = ConflictOption.OverwriteChanges; //cheaty bullshit for just overpowering the conflict changes negating the concurrency violation. da.Fill(DTAcctLog); //you have to fill it to update it. DTAcctLog.Rows[4]["repuid"] = 2000042; DTAcctLog.Rows[5]["repuid"] = 2000032; DTAcctLog.Rows[6]["repuid"] = 2000012; DTAcctLog.Rows[7]["repuid"] = 2000015; DTAcctLog.Rows[8]["repuid"] = 2000017; DTAcctLog.Rows[9]["repuid"] = 2000025; da.UpdateCommand = cb.GetUpdateCommand(); da.Update(DTAcctLog); DTAcctLog.AcceptChanges(); dataGridView1.DataSource = DTAcctLog; //da.Fill(DTAcctLog); } } catch (Exception ex) { MessageBoxHelper.PrepToCenterMessageBoxOnForm(this); MessageBox.Show("Error\n" + ex.Message + "\n\n" + ex.ToString()); } }
static private DataTable SaveDynamicCollection_Deletes(esDataRequest request) { SACommand cmd = null; DataTable dataTable = CreateDataTable(request); using (esTransactionScope scope = new esTransactionScope()) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; try { da.ContinueUpdateOnError = request.ContinueUpdateOnError; cmd = da.DeleteCommand = Shared.BuildDynamicDeleteCommand(request, request.CollectionSavePacket[0]); esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); DataRow[] singleRow = new DataRow[1]; // Delete each record foreach (esEntitySavePacket packet in request.CollectionSavePacket) { DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SetOriginalValues(request, packet, row, true); row.AcceptChanges(); row.Delete(); singleRow[0] = row; da.Update(singleRow); if (row.HasErrors) { request.FireOnError(packet, row.RowError); } dataTable.Rows.Clear(); // ADO.NET won't let us reuse the same DataRow } } finally { esTransactionScope.DeEnlist(cmd); } } scope.Complete(); } return(request.Table); }
public override void UpdateDataSet(string sqlQuery, ref DataSet dts) { SACommand cmd = null; try { if (_transaction != null && _currentState != ConnectionState.Open) { Open(); } if (dts.HasChanges()) { int i = 0; IList <string> queryPart = Regex.Split(sqlQuery, ";"); foreach (DataTable table in dts.Tables) { if (_transaction == null) { cmd = new SACommand(queryPart[i++], _connection); } else { cmd = new SACommand(queryPart[i++], _connection, _transaction); } SADataAdapter dta = new SADataAdapter(cmd); SACommandBuilder commandBuilder = new SACommandBuilder(dta); dta.Update(table); } } } catch (System.Exception e) { if (_transaction != null && _currentState != ConnectionState.Open) { Rollback(); } string msg = "DataAccessLayer Error: " + ShowMessage(e.Message); throw new System.Exception(msg); } finally { if (_transaction == null && _currentState == ConnectionState.Open) { Close(); } if (cmd != null) { cmd.Dispose(); } } }
private void button2_Click_1(object sender, EventArgs e) //send to DB { string connectionString = connStr.Text.Trim(); try { using (SAConnection conn = new SAConnection(connectionString)) //DataTable Tester { conn.Open(); SADataAdapter da = new SADataAdapter("select * from acctlog", conn); SACommandBuilder cb = new SACommandBuilder(da); da.Fill(DTAcctLog); da.Update(DTAcctLog); } } catch (Exception ex) { MessageBoxHelper.PrepToCenterMessageBoxOnForm(this); MessageBox.Show("Error\n" + ex.Message); } }
private void button2_Click_2(object sender, EventArgs e) { string connectionString = connStr.Text.Trim(); try { using (SAConnection conn = new SAConnection(connectionString)) //DataSet tester { DTAcctLog.Rows.Clear(); //doesn't affect the update. conn.Open(); //open connection from using block SADataAdapter da = new SADataAdapter("Select * from acctlog", conn); //create a new data adapter. I don't know what's special about this. SACommandBuilder cb = new SACommandBuilder(da); cb.ConflictOption = ConflictOption.OverwriteChanges; //cheaty bullshit for just overpowering the conflict changes negating the concurrency violation. da.Fill(DTAcctLog); //you have to fill it to update it. DTAcctLog.Rows[4]["repuid"] = 2000042; DTAcctLog.Rows[5]["repuid"] = 2000032; DTAcctLog.Rows[6]["repuid"] = 2000012; DTAcctLog.Rows[7]["repuid"] = 2000015; DTAcctLog.Rows[8]["repuid"] = 2000017; DTAcctLog.Rows[9]["repuid"] = 2000025; da.UpdateCommand = cb.GetUpdateCommand(); da.Update(DTAcctLog); DTAcctLog.AcceptChanges(); dataGridView1.DataSource = DTAcctLog; //da.Fill(DTAcctLog); } } catch (Exception ex) { MessageBoxHelper.PrepToCenterMessageBoxOnForm(this); MessageBox.Show("Error\n" + ex.Message + "\n\n" + ex.ToString() ); } }
private static DataTable SaveStoredProcEntity(esDataRequest request) { bool needToDelete = request.EntitySavePacket.RowState == esDataRowState.Deleted; DataTable dataTable = CreateDataTable(request); using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SACommand cmd = null; switch (request.EntitySavePacket.RowState) { case esDataRowState.Added: cmd = da.InsertCommand = Shared.BuildStoredProcInsertCommand(request); SetModifiedValues(request, request.EntitySavePacket, row); break; case esDataRowState.Modified: cmd = da.UpdateCommand = Shared.BuildStoredProcUpdateCommand(request); SetOriginalValues(request, request.EntitySavePacket, row, false); SetModifiedValues(request, request.EntitySavePacket, row); row.AcceptChanges(); row.SetModified(); break; case esDataRowState.Deleted: cmd = da.DeleteCommand = Shared.BuildStoredProcDeleteCommand(request); SetOriginalValues(request, request.EntitySavePacket, row, true); row.AcceptChanges(); row.Delete(); break; } DataRow[] singleRow = new DataRow[1]; singleRow[0] = row; try { esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); #region Profiling if (sTraceHandler != null) { using (esTraceArguments esTrace = new esTraceArguments(request, cmd, "SaveEntityStoredProcedure", System.Environment.StackTrace)) { try { da.Update(singleRow); } catch (Exception ex) { esTrace.Exception = ex.Message; throw; } } } else #endregion Profiling { da.Update(singleRow); } } finally { esTransactionScope.DeEnlist(cmd); } if (cmd.Parameters != null) { foreach (SAParameter param in cmd.Parameters) { switch (param.Direction) { case ParameterDirection.Output: case ParameterDirection.InputOutput: request.EntitySavePacket.CurrentValues[param.SourceColumn] = param.Value; break; } } } } return dataTable; }
private static DataTable SaveStoredProcCollection(esDataRequest request) { bool needToInsert = false; bool needToUpdate = false; bool needToDelete = false; Dictionary<DataRow, esEntitySavePacket> rowMapping = null; if (request.ContinueUpdateOnError) { rowMapping = new Dictionary<DataRow, esEntitySavePacket>(); } //================================================ // Create the DataTable ... //================================================ DataTable dataTable = CreateDataTable(request); foreach (esEntitySavePacket packet in request.CollectionSavePacket) { DataRow row = dataTable.NewRow(); switch (request.EntitySavePacket.RowState) { case esDataRowState.Added: SetModifiedValues(request, packet, row); dataTable.Rows.Add(row); if (request.ContinueUpdateOnError) rowMapping[row] = packet; break; case esDataRowState.Modified: SetOriginalValues(request, packet, row, false); SetModifiedValues(request, packet, row); dataTable.Rows.Add(row); row.AcceptChanges(); row.SetModified(); if (request.ContinueUpdateOnError) rowMapping[row] = packet; break; case esDataRowState.Deleted: SetOriginalValues(request, packet, row, true); dataTable.Rows.Add(row); row.AcceptChanges(); row.Delete(); if (request.ContinueUpdateOnError) rowMapping[row] = packet; break; } } if (Shared.HasUpdates(dataTable.Rows, out needToInsert, out needToUpdate, out needToDelete)) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; SACommand cmd = null; if (needToInsert) da.InsertCommand = cmd = Shared.BuildStoredProcInsertCommand(request); if (needToUpdate) da.UpdateCommand = cmd = Shared.BuildStoredProcUpdateCommand(request); if (needToDelete) da.DeleteCommand = cmd = Shared.BuildStoredProcDeleteCommand(request); using (esTransactionScope scope = new esTransactionScope()) { if (needToInsert) esTransactionScope.Enlist(da.InsertCommand, request.ConnectionString, CreateIDbConnectionDelegate); if (needToUpdate) esTransactionScope.Enlist(da.UpdateCommand, request.ConnectionString, CreateIDbConnectionDelegate); if (needToDelete) esTransactionScope.Enlist(da.DeleteCommand, request.ConnectionString, CreateIDbConnectionDelegate); try { #region Profiling if (sTraceHandler != null) { using (esTraceArguments esTrace = new esTraceArguments(request, cmd, "SaveCollectionStoredProcedure", System.Environment.StackTrace)) { try { da.Update(dataTable); } catch (Exception ex) { esTrace.Exception = ex.Message; throw; } } } else #endregion Profiling { da.Update(dataTable); } } finally { if (needToInsert) esTransactionScope.DeEnlist(da.InsertCommand); if (needToUpdate) esTransactionScope.DeEnlist(da.UpdateCommand); if (needToDelete) esTransactionScope.DeEnlist(da.DeleteCommand); } scope.Complete(); } } if (request.ContinueUpdateOnError && dataTable.HasErrors) { DataRow[] errors = dataTable.GetErrors(); foreach (DataRow rowWithError in errors) { request.FireOnError(rowMapping[rowWithError], rowWithError.RowError); } } } return request.Table; }
private static DataTable SaveDynamicEntity(esDataRequest request) { bool needToDelete = request.EntitySavePacket.RowState == esDataRowState.Deleted; DataTable dataTable = CreateDataTable(request); using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SACommand cmd = null; switch (request.EntitySavePacket.RowState) { case esDataRowState.Added: cmd = da.InsertCommand = Shared.BuildDynamicInsertCommand(request, request.EntitySavePacket.ModifiedColumns); SetModifiedValues(request, request.EntitySavePacket, row); break; case esDataRowState.Modified: cmd = da.UpdateCommand = Shared.BuildDynamicUpdateCommand(request, request.EntitySavePacket.ModifiedColumns); SetOriginalValues(request, request.EntitySavePacket, row, false); SetModifiedValues(request, request.EntitySavePacket, row); row.AcceptChanges(); row.SetModified(); break; case esDataRowState.Deleted: cmd = da.DeleteCommand = Shared.BuildDynamicDeleteCommand(request, request.EntitySavePacket); SetOriginalValues(request, request.EntitySavePacket, row, true); row.AcceptChanges(); row.Delete(); break; } if (!needToDelete && request.Properties != null) { request.Properties["esDataRequest"] = request; request.Properties["esEntityData"] = request.EntitySavePacket; dataTable.ExtendedProperties["props"] = request.Properties; } DataRow[] singleRow = new DataRow[1]; singleRow[0] = row; try { if (!request.IgnoreComputedColumns) { da.RowUpdated += new SARowUpdatedEventHandler(OnRowUpdated); } esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); #region Profiling if (sTraceHandler != null) { using (esTraceArguments esTrace = new esTraceArguments(request, cmd, request.EntitySavePacket, "SaveEntityDynamic", System.Environment.StackTrace)) { try { da.Update(singleRow); } catch (Exception ex) { esTrace.Exception = ex.Message; throw; } } } else #endregion Profiling { da.Update(singleRow); } } finally { esTransactionScope.DeEnlist(cmd); } } return dataTable; }
private static DataTable SaveDynamicCollection_InsertsUpdates(esDataRequest request) { DataTable dataTable = CreateDataTable(request); using (esTransactionScope scope = new esTransactionScope()) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; SACommand cmd = null; if (!request.IgnoreComputedColumns) { da.RowUpdated += new SARowUpdatedEventHandler(OnRowUpdated); } foreach (esEntitySavePacket packet in request.CollectionSavePacket) { if (packet.RowState != esDataRowState.Added && packet.RowState != esDataRowState.Modified) continue; DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); switch (packet.RowState) { case esDataRowState.Added: cmd = da.InsertCommand = Shared.BuildDynamicInsertCommand(request, packet.ModifiedColumns); SetModifiedValues(request, packet, row); break; case esDataRowState.Modified: cmd = da.UpdateCommand = Shared.BuildDynamicUpdateCommand(request, packet.ModifiedColumns); SetOriginalValues(request, packet, row, false); SetModifiedValues(request, packet, row); row.AcceptChanges(); row.SetModified(); break; } request.Properties["esDataRequest"] = request; request.Properties["esEntityData"] = packet; dataTable.ExtendedProperties["props"] = request.Properties; DataRow[] singleRow = new DataRow[1]; singleRow[0] = row; try { esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); #region Profiling if (sTraceHandler != null) { using (esTraceArguments esTrace = new esTraceArguments(request, cmd, packet, "SaveCollectionDynamic", System.Environment.StackTrace)) { try { da.Update(singleRow); } catch (Exception ex) { esTrace.Exception = ex.Message; throw; } } } else #endregion Profiling { da.Update(singleRow); } if (row.HasErrors) { request.FireOnError(packet, row.RowError); } } finally { esTransactionScope.DeEnlist(cmd); dataTable.Rows.Clear(); } } } scope.Complete(); } return dataTable; }
private static DataTable SaveDynamicCollection_Deletes(esDataRequest request) { SACommand cmd = null; DataTable dataTable = CreateDataTable(request); using (esTransactionScope scope = new esTransactionScope()) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; try { da.ContinueUpdateOnError = request.ContinueUpdateOnError; cmd = da.DeleteCommand = Shared.BuildDynamicDeleteCommand(request, request.CollectionSavePacket[0]); esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); DataRow[] singleRow = new DataRow[1]; // Delete each record foreach (esEntitySavePacket packet in request.CollectionSavePacket) { DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SetOriginalValues(request, packet, row, true); row.AcceptChanges(); row.Delete(); singleRow[0] = row; #region Profiling if (sTraceHandler != null) { using (esTraceArguments esTrace = new esTraceArguments(request, cmd, packet, "SaveCollectionDynamic", System.Environment.StackTrace)) { try { da.Update(singleRow); } catch (Exception ex) { esTrace.Exception = ex.Message; throw; } } } else #endregion Profiling { da.Update(singleRow); } if (row.HasErrors) { request.FireOnError(packet, row.RowError); } dataTable.Rows.Clear(); // ADO.NET won't let us reuse the same DataRow } } finally { esTransactionScope.DeEnlist(cmd); } } scope.Complete(); } return request.Table; }
static private DataTable SaveDynamicCollection_Deletes(esDataRequest request) { SACommand cmd = null; DataTable dataTable = CreateDataTable(request); using (esTransactionScope scope = new esTransactionScope()) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; try { da.ContinueUpdateOnError = request.ContinueUpdateOnError; cmd = da.DeleteCommand = Shared.BuildDynamicDeleteCommand(request, request.CollectionSavePacket[0]); esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); DataRow[] singleRow = new DataRow[1]; // Delete each record foreach (esEntitySavePacket packet in request.CollectionSavePacket) { DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SetOriginalValues(request, packet, row, true); row.AcceptChanges(); row.Delete(); singleRow[0] = row; da.Update(singleRow); if (row.HasErrors) { request.FireOnError(packet, row.RowError); } dataTable.Rows.Clear(); // ADO.NET won't let us reuse the same DataRow } } finally { esTransactionScope.DeEnlist(cmd); } } scope.Complete(); } return request.Table; }
static private DataTable SaveStoredProcEntity(esDataRequest request) { bool needToDelete = request.EntitySavePacket.RowState == esDataRowState.Deleted; DataTable dataTable = CreateDataTable(request); using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SACommand cmd = null; switch (request.EntitySavePacket.RowState) { case esDataRowState.Added: cmd = da.InsertCommand = Shared.BuildStoredProcInsertCommand(request); SetModifiedValues(request, request.EntitySavePacket, row); break; case esDataRowState.Modified: cmd = da.UpdateCommand = Shared.BuildStoredProcUpdateCommand(request); SetOriginalValues(request, request.EntitySavePacket, row, false); SetModifiedValues(request, request.EntitySavePacket, row); row.AcceptChanges(); row.SetModified(); break; case esDataRowState.Deleted: cmd = da.DeleteCommand = Shared.BuildStoredProcDeleteCommand(request); SetOriginalValues(request, request.EntitySavePacket, row, true); row.AcceptChanges(); row.Delete(); break; } DataRow[] singleRow = new DataRow[1]; singleRow[0] = row; try { esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); da.Update(singleRow); } finally { esTransactionScope.DeEnlist(cmd); } if (cmd.Parameters != null) { foreach (SAParameter param in cmd.Parameters) { switch (param.Direction) { case ParameterDirection.Output: case ParameterDirection.InputOutput: request.EntitySavePacket.CurrentValues[param.SourceColumn] = param.Value; break; } } } } return(dataTable); }
static private DataTable SaveStoredProcCollection(esDataRequest request) { bool needToInsert = false; bool needToUpdate = false; bool needToDelete = false; Dictionary <DataRow, esEntitySavePacket> rowMapping = null; if (request.ContinueUpdateOnError) { rowMapping = new Dictionary <DataRow, esEntitySavePacket>(); } //================================================ // Create the DataTable ... //================================================ DataTable dataTable = CreateDataTable(request); foreach (esEntitySavePacket packet in request.CollectionSavePacket) { DataRow row = dataTable.NewRow(); switch (request.EntitySavePacket.RowState) { case esDataRowState.Added: SetModifiedValues(request, packet, row); dataTable.Rows.Add(row); if (request.ContinueUpdateOnError) { rowMapping[row] = packet; } break; case esDataRowState.Modified: SetOriginalValues(request, packet, row, false); SetModifiedValues(request, packet, row); dataTable.Rows.Add(row); row.AcceptChanges(); row.SetModified(); if (request.ContinueUpdateOnError) { rowMapping[row] = packet; } break; case esDataRowState.Deleted: SetOriginalValues(request, packet, row, true); dataTable.Rows.Add(row); row.AcceptChanges(); row.Delete(); if (request.ContinueUpdateOnError) { rowMapping[row] = packet; } break; } } if (Shared.HasUpdates(dataTable.Rows, out needToInsert, out needToUpdate, out needToDelete)) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; SACommand cmd = null; if (needToInsert) { da.InsertCommand = cmd = Shared.BuildStoredProcInsertCommand(request); } if (needToUpdate) { da.UpdateCommand = cmd = Shared.BuildStoredProcUpdateCommand(request); } if (needToDelete) { da.DeleteCommand = cmd = Shared.BuildStoredProcDeleteCommand(request); } using (esTransactionScope scope = new esTransactionScope()) { if (needToInsert) { esTransactionScope.Enlist(da.InsertCommand, request.ConnectionString, CreateIDbConnectionDelegate); } if (needToUpdate) { esTransactionScope.Enlist(da.UpdateCommand, request.ConnectionString, CreateIDbConnectionDelegate); } if (needToDelete) { esTransactionScope.Enlist(da.DeleteCommand, request.ConnectionString, CreateIDbConnectionDelegate); } try { da.Update(dataTable); } finally { if (needToInsert) { esTransactionScope.DeEnlist(da.InsertCommand); } if (needToUpdate) { esTransactionScope.DeEnlist(da.UpdateCommand); } if (needToDelete) { esTransactionScope.DeEnlist(da.DeleteCommand); } } scope.Complete(); } } if (request.ContinueUpdateOnError && dataTable.HasErrors) { DataRow[] errors = dataTable.GetErrors(); foreach (DataRow rowWithError in errors) { request.FireOnError(rowMapping[rowWithError], rowWithError.RowError); } } } return(request.Table); }
static private DataTable SaveDynamicEntity(esDataRequest request) { bool needToDelete = request.EntitySavePacket.RowState == esDataRowState.Deleted; DataTable dataTable = CreateDataTable(request); using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); SACommand cmd = null; switch (request.EntitySavePacket.RowState) { case esDataRowState.Added: cmd = da.InsertCommand = Shared.BuildDynamicInsertCommand(request, request.EntitySavePacket.ModifiedColumns); SetModifiedValues(request, request.EntitySavePacket, row); break; case esDataRowState.Modified: cmd = da.UpdateCommand = Shared.BuildDynamicUpdateCommand(request, request.EntitySavePacket.ModifiedColumns); SetOriginalValues(request, request.EntitySavePacket, row, false); SetModifiedValues(request, request.EntitySavePacket, row); row.AcceptChanges(); row.SetModified(); break; case esDataRowState.Deleted: cmd = da.DeleteCommand = Shared.BuildDynamicDeleteCommand(request, request.EntitySavePacket); SetOriginalValues(request, request.EntitySavePacket, row, true); row.AcceptChanges(); row.Delete(); break; } if (!needToDelete && request.Properties != null) { request.Properties["esDataRequest"] = request; request.Properties["esEntityData"] = request.EntitySavePacket; dataTable.ExtendedProperties["props"] = request.Properties; } DataRow[] singleRow = new DataRow[1]; singleRow[0] = row; try { if (!request.IgnoreComputedColumns) { da.RowUpdated += new SARowUpdatedEventHandler(OnRowUpdated); } esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); da.Update(singleRow); } finally { esTransactionScope.DeEnlist(cmd); } } return(dataTable); }
static private DataTable SaveDynamicCollection_InsertsUpdates(esDataRequest request) { DataTable dataTable = CreateDataTable(request); using (esTransactionScope scope = new esTransactionScope()) { using (SADataAdapter da = new SADataAdapter()) { da.AcceptChangesDuringUpdate = false; da.ContinueUpdateOnError = request.ContinueUpdateOnError; SACommand cmd = null; if (!request.IgnoreComputedColumns) { da.RowUpdated += new SARowUpdatedEventHandler(OnRowUpdated); } foreach (esEntitySavePacket packet in request.CollectionSavePacket) { if (packet.RowState != esDataRowState.Added && packet.RowState != esDataRowState.Modified) { continue; } DataRow row = dataTable.NewRow(); dataTable.Rows.Add(row); switch (packet.RowState) { case esDataRowState.Added: cmd = da.InsertCommand = Shared.BuildDynamicInsertCommand(request, packet.ModifiedColumns); SetModifiedValues(request, packet, row); break; case esDataRowState.Modified: cmd = da.UpdateCommand = Shared.BuildDynamicUpdateCommand(request, packet.ModifiedColumns); SetOriginalValues(request, packet, row, false); SetModifiedValues(request, packet, row); row.AcceptChanges(); row.SetModified(); break; } request.Properties["esDataRequest"] = request; request.Properties["esEntityData"] = packet; dataTable.ExtendedProperties["props"] = request.Properties; DataRow[] singleRow = new DataRow[1]; singleRow[0] = row; try { esTransactionScope.Enlist(cmd, request.ConnectionString, CreateIDbConnectionDelegate); da.Update(singleRow); if (row.HasErrors) { request.FireOnError(packet, row.RowError); } } finally { esTransactionScope.DeEnlist(cmd); dataTable.Rows.Clear(); } } } scope.Complete(); } return(dataTable); }