コード例 #1
0
 private int UpdateUpdatedRows(dt_guard_profile dataSet, List <DataRow> allChangedRows, List <DataRow> allAddedRows)
 {
     return(0);
 }
コード例 #2
0
        public virtual int UpdateAll(dt_guard_profile dataSet)
        {
            if (dataSet == null)
            {
                throw new ArgumentNullException("dataSet");
            }
            if (!dataSet.HasChanges())
            {
                return(0);
            }
            IDbConnection workConnection = this.Connection;

            if (workConnection == null)
            {
                throw new ApplicationException("TableAdapterManager contains no connection information. Set each TableAdapterManager TableAdapter property to a valid TableAdapter instance.");
            }
            bool workConnOpened = false;

            if ((workConnection.State & ConnectionState.Broken) == ConnectionState.Broken)
            {
                workConnection.Close();
            }
            if (workConnection.State == ConnectionState.Closed)
            {
                workConnection.Open();
                workConnOpened = true;
            }
            IDbTransaction workTransaction = workConnection.BeginTransaction();

            if (workTransaction == null)
            {
                throw new ApplicationException("The transaction cannot begin. The current data connection does not support transactions or the current state is not allowing the transaction to begin.");
            }
            List <DataRow>     allChangedRows = new List <DataRow>();
            List <DataRow>     allAddedRows   = new List <DataRow>();
            List <DataAdapter> adaptersWithAcceptChangesDuringUpdate = new List <DataAdapter>();
            Dictionary <object, IDbConnection> objs = new Dictionary <object, IDbConnection>();
            int     result        = 0;
            DataSet backupDataSet = null;

            if (this.BackupDataSetBeforeUpdate)
            {
                backupDataSet = new DataSet();
                backupDataSet.Merge(dataSet);
            }
            try
            {
                try
                {
                    if (this.UpdateOrder != TableAdapterManager.UpdateOrderOption.UpdateInsertDelete)
                    {
                        result += this.UpdateInsertedRows(dataSet, allAddedRows);
                        result += this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows);
                    }
                    else
                    {
                        result += this.UpdateUpdatedRows(dataSet, allChangedRows, allAddedRows);
                        result += this.UpdateInsertedRows(dataSet, allAddedRows);
                    }
                    result += this.UpdateDeletedRows(dataSet, allChangedRows);
                    workTransaction.Commit();
                    if (0 < allAddedRows.Count)
                    {
                        DataRow[] rows = new DataRow[allAddedRows.Count];
                        allAddedRows.CopyTo(rows);
                        for (int i = 0; i < (int)rows.Length; i++)
                        {
                            rows[i].AcceptChanges();
                        }
                    }
                    if (0 < allChangedRows.Count)
                    {
                        DataRow[] rows = new DataRow[allChangedRows.Count];
                        allChangedRows.CopyTo(rows);
                        for (int i = 0; i < (int)rows.Length; i++)
                        {
                            rows[i].AcceptChanges();
                        }
                    }
                }
                catch (Exception exception)
                {
                    Exception ex = exception;
                    workTransaction.Rollback();
                    if (this.BackupDataSetBeforeUpdate)
                    {
                        dataSet.Clear();
                        dataSet.Merge(backupDataSet);
                    }
                    else if (0 < allAddedRows.Count)
                    {
                        DataRow[] rows = new DataRow[allAddedRows.Count];
                        allAddedRows.CopyTo(rows);
                        for (int i = 0; i < (int)rows.Length; i++)
                        {
                            DataRow row = rows[i];
                            row.AcceptChanges();
                            row.SetAdded();
                        }
                    }
                    throw ex;
                }
            }
            finally
            {
                if (workConnOpened)
                {
                    workConnection.Close();
                }
                if (0 < adaptersWithAcceptChangesDuringUpdate.Count)
                {
                    DataAdapter[] adapters = new DataAdapter[adaptersWithAcceptChangesDuringUpdate.Count];
                    adaptersWithAcceptChangesDuringUpdate.CopyTo(adapters);
                    for (int i = 0; i < (int)adapters.Length; i++)
                    {
                        adapters[i].AcceptChangesDuringUpdate = true;
                    }
                }
            }
            return(result);
        }