我正在写一大堆代码的问题。 我想要的是使用DataAdapter.Update和新创建的数据表更新数据库表而不使用DataAdapter.fill。 我已经编写了一个方法来更新数据表中的数据,并且工作正常:
public static int UpdateData<T>(this _ModelManager<T> MM, DataTable dt)
{
int updatedRowCount = 0;
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
conn.Open();
using (SQLiteTransaction tr = conn.BeginTransaction())
{
try
{
string sql = "SELECT * FROM " + MM.tableName;
using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
{
SQLiteDataAdapter da = new SQLiteDataAdapter(cmd);
SQLiteCommandBuilder builder = new SQLiteCommandBuilder(da);
da.AcceptChangesDuringUpdate = true;
da.UpdateCommand = builder.GetUpdateCommand();
da.DeleteCommand = builder.GetDeleteCommand();
da.InsertCommand = builder.GetInsertCommand();
updatedRowCount = da.Update(dt);
tr.Commit();
}
}
catch (Exception)
{
tr.Rollback();
}
}
conn.Close();
}
return updatedRowCount;
}
问题是此方法需要数据表作为输入数据。由于我和我的团队更喜欢使用列表(并且已经编写了许多代码),我想创建一个可以接受列表的重载方法,从该列表创建数据表,然后使用已经编写的内容更新数据库方法。这就是我所做的:
public static int UpdateData<T>(this _ModelManager<T> MM, List<T> list)
{
DataTable dt = list.ToDataTable();
foreach (DataRow row in dt.Rows)
{
row.SetModified();
}
return MM.UpdateData(dt);
}
此方法正常运行并返回正确数量的更新行,但数据库未使用新数据进行更新。有人可以帮我理解我的错误吗? Ty为你提供帮助。