如何将我对数据表所做的更改提交到我从中获取它的表
本文关键字:提交 获取 数据表 | 更新日期: 2023-09-27 18:35:00
我正在开发一个极简的数据库接口,该接口从所有相关表中获取所有相关信息,并将该信息存储在本地数据表中,以便可以根据需要修改、更改、更新信息等等,而无需保持与数据库的持续连接。
该方法运行良好,所有更改都反映并存储在表中,这很棒。
现在,我需要知道如何将数据表中本地所做的更改反映到我从中获取表的数据库中。
在我看来,我读到的所有内容似乎都在说"你需要保持连接才能做到这一点",但因为对数据表进行更改可能需要一些时间,而且我听说最好的做法是建立连接,做你需要做的事情,然后出去,我在这里看到了一种冲突。
我引用的文章是这个,还有这个。
这是获取表的代码:
public static DataTable GetTable( string Table ) {
string Query = "SELECT * FROM " + Table;
return SQLLib.GetDataTable( Query, null );
}
private static DataTable GetDataTable( string CMD, object[] Params ) {
DataSet DS = new DataSet( );
using ( MySqlConnection MSQCon = new MySqlConnection( SQLLib.sqlconstr ) ) {
try { MSQCon.Open( ); } catch ( MySqlException ) {
Console.WriteLine( "Failed to open SQL Connection" );
}
MySqlDataAdapter MSQDA = new MySqlDataAdapter( );
MySqlCommand MSQCom = new MySqlCommand( CMD, MSQCon );
if (Params != null) for ( int c = 0; c < Params.Length; c++ )
MSQCom.Parameters.AddWithValue( "@param_val_" + ( c + 1 ), Params[c] );
MSQCom.CommandType = CommandType.Text;
MSQDA.SelectCommand = MSQCom;
MSQDA.Fill( DS );
MSQCon.Close( );
} try { return DS.Tables[0];
} catch ( IndexOutOfRangeException ) { return SQLLib.GetDataTable( CMD, Params ); }
}
那么,现在,有没有一种方法可以使用我在本地保留的 DataTable 更新源表,直到它准备好提交?
这不是关于保持连接打开,你只需要使用命令生成器,我相信MySql也是如此。
private MySqlDataAdapter adapt;
private DataSet someDataSet;
someDataSet = new DataSet();
public DataSet GetCustomerData(int customerId)
{
using(MySqlConnection connect = new MySqlConnection(ConnString))
{
connect.Open();
MySqlCommand comm = new MySqlCommand("SELECT * FROM customers WHERE Id = @0", connect);
someDataSet.Tables.Add("CustomersTable");
comm.Parameters.AddWithValue("@0", customerId);
adapt.SelectCommand = comm;
adapt.Fill(someDataSet.Tables["CustomersTable"]);
}
return someDataSet;
}
现在进行更新:您也可以使用新的适配器,但是您必须给它一个选择命令,基于该命令,命令构建器将发出插入,更新和删除命令。
public void UpdateTable(DataTable table, int customerId)
{
using (MySqlConnection connect = new MySqlConnection(ConnString))
{
connect.Open();
MySqlCommandBuilder commbuilder = new MySqlCommandBuilder(adapt);
adapt.SelectCommand = new MySqlCommand("SELECT * FROM customers WHERE Id = "+customerId, connect); //or use parameters.addwithvalue
adapt.Update(table);
}
}
您应该创建一个用于更新数据库的MySqlCommand
,并将其设置为MySqlDataAdapter
的UpdateCommand
属性值。就像你为SelectCommand
这样做一样.
当你准备好提交时,你只需调用你的MySqlDataAdapter
的Update()
方法。