我正在使用Sqltransation将数据从sourcedt更新为datatable表。 下面两行,首先我将数据从clonedt合并到sourcedt。然后尝试将其更新到数据库表。
SqlConnection con = new SqlConnection(connectionString);
con.Open();
SqlTransaction trans = con.BeginTransaction();
SqlCommand cmd = new SqlCommand(strCommand, con, trans)
SqlDataAdapter da = new SqlDataAdapter(cmd)
SqlCommandBuilder cmb = new SqlCommandBuilder(da);
da.InsertCommand = cmb.GetInsertCommand();
da.UpdateCommand = cmb.GetUpdateCommand();
da.InsertCommand.Transaction = trans;
da.UpdateCommand.Transaction = trans;
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(sourceDt);
sourceDt.Merge(clonedDt, false, MissingSchemaAction.AddWithKey);
int count = da.Update(sourceDt);
trans.Commit(); //Commit the changes to database
其余的代码很好,问题似乎只在这个提交语句中。我怎么能找到错误的?
答案 0 :(得分:2)
您需要将sourceDt传递给dataadapter Update方法
da.Update(sourceDt);
我认为你根本不需要交易。但你需要尝试一下。
最好将一次性对象封装在using语句中。这将正确关闭连接并将其资源处理回操作系统。如果未提交,事务也将自动回滚
using(SqlConnection con = new SqlConnection(connectionString))
{
con.Open();
using(SqlTransaction trans = con.BeginTransaction())
using(SqlCommand cmd = new SqlCommand(strCommand, con, trans))
using(SqlDataAdapter da = new SqlDataAdapter(cmd))
{
SqlCommandBuilder cmb = new SqlCommandBuilder(da);
cmb.GetInsertCommand().Transaction = trans;
cmb.GetUpdateCommand().Transaction = trans;
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(sourceDt);
sourceDt.Merge(clonedDt, false, MissingSchemaAction.AddWithKey);
int count = da.Update(sourceDt);
trans.Commit();
}
}