public void UpdateDataSet(DataSet dataset, int?commandTimeout = null)
        {
            dataset = dataset.GetChanges();
            if (dataset == null)
            {
                return;
            }

            var changeCount = 0;

            using (var con = CreateConnection())
            {
                con.Open();
                using (var trans = con.BeginTransaction())
                {
                    foreach (DataTable table in dataset.Tables)
                    {
                        using (var cmd = CreateDbCommand(commandTimeout))
                        {
                            cmd.CommandText = string.Format("SELECT {0} FROM {1}",
                                                            string.Join(",", table.Columns.Cast <DataColumn>().Select(x => QuoteIdentifier(x.ColumnName))),
                                                            QuoteIdentifier(table.TableName));
                            cmd.Connection = con;
                            using (var adapter = CreateDbDataAdapter())
                            {
                                using (var cmdBuilder = CreateDbCommandBuilder())
                                {
                                    adapter.SelectCommand  = cmd;
                                    cmdBuilder.DataAdapter = adapter;
                                    changeCount           += adapter.Update(table);
                                }
                            }
                        }
                    }
                    trans.Commit();
                }
            }

            if (changeCount > 0)
            {
                var dataChange = new DataChange
                {
                    ChangeInfo   = dataset.Copy(),
                    ChangeGetter = arg => (DataSet)arg,
                };

                RequestFireDataChanged(dataChange);
            }
        }
        public int ExecuteDelete(string table, int?commandTimeout = null)
        {
            var result = ExecuteNonQuery(string.Format("DELETE FROM {0};", QuoteIdentifier(table)), false, commandTimeout: commandTimeout);

            if (result > 0)
            {
                var dataChange = new DataChange
                {
                    ChangeInfo         = table,
                    ChangedTableGetter = args => new string[] { (string)args },
                };
                RequestFireDataChanged(dataChange);
            }

            return(result);
        }