...
...SqlCommandBuilder cb = new SqlCommandBuilder(da);
conn.Open();
using (SqlTransaction txn = conn.BeginTransaction())
{
cb.GetInsertCommand().Transaction = txn;
cb.GetUpdateCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(dt);
}
conn.Close();
Console.WriteLine("成功");
Console.ReadKey();
上面的代码使用SqlCommandBuilder 生成更新逻辑,并在事务中执行,为什么报错呢:“如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化。”什么意思啊?
...SqlCommandBuilder cb = new SqlCommandBuilder(da);
conn.Open();
using (SqlTransaction txn = conn.BeginTransaction())
{
cb.GetInsertCommand().Transaction = txn;
cb.GetUpdateCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(dt);
}
conn.Close();
Console.WriteLine("成功");
Console.ReadKey();
上面的代码使用SqlCommandBuilder 生成更新逻辑,并在事务中执行,为什么报错呢:“如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化。”什么意思啊?
cb.GetInsertCommand().Transaction = txn;
cb.GetUpdateCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(dt);
txn.Commit();
还是报同样的错误
txn.Commit();
cb.GetUpdateCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
被和谐掉了。可以这样试下,去掉你写的这三句代码,改成:da.SelectCommand.Transaction=txn;
http://blog.tianya.cn/blogger/post_show.asp?BlogID=66841&PostID=1888230
参考。
conn.Open();
cb.GetInsertCommand();
using (SqlTransaction txn = conn.BeginTransaction())
{
cb.GetInsertCommand().Transaction = txn;
cb.GetUpdateCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(dt);
}
conn.Close();
Console.WriteLine("成功");
Console.ReadKey();我随便添了一句,就成功了,可是,为什么呢?
http://blog.tianya.cn/blogger/post_show.asp?BlogID=66841&PostID=1888230
conn.Open();
cb.GetInsertCommand();
using (SqlTransaction txn = conn.BeginTransaction())
{
cb.GetInsertCommand().Transaction = txn;
cb.GetUpdateCommand().Transaction = txn;
cb.GetDeleteCommand().Transaction = txn;
da.Update(dt);
txn.Commit();
}
conn.Close();
Console.WriteLine("成功");
Console.ReadKey();我随便添了一句,就成功了,可是,为什么呢?
那个SqlCommandBuilder根本没必要使用,个人认为它也并不好,自动创建的SQL语句并不是最好的,我更倾向于自己创建SqlCommand,然后给da的InsertCommand、UpdateCommand、DeleteCommand三个属性赋值,这过程中自然也可以设置SqlTransaction,整个过程不会出任何错误,非常严谨。