Esempio n. 1
0
        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);
        }
Esempio n. 3
0
        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();
                }
            }
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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() );

            }
        }
Esempio n. 6
0
        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);

            }

        }
Esempio n. 7
0
        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;
        }
Esempio n. 8
0
        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;
        }
Esempio n. 9
0
        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;
        }
Esempio n. 10
0
        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;
        }
Esempio n. 11
0
        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);
        }