C# 尝试在C代码中使两个SQL INSERT语句原子化
下面是我在SSIS脚本任务中使用的代码。我试图使这两个插入原子,因为他们与类似的客户处理 executeNonQuery工作正常,按其应该的方式锁定SQL表 第二个.executNonQuery引发错误: ExecuteOnQuery要求命令在 分配给该命令的连接位于挂起的本地事务中。 命令的事务属性尚未初始化 代码: 编辑C# 尝试在C代码中使两个SQL INSERT语句原子化,c#,sql,transactions,ssis,atomic,C#,Sql,Transactions,Ssis,Atomic,下面是我在SSIS脚本任务中使用的代码。我试图使这两个插入原子,因为他们与类似的客户处理 executeNonQuery工作正常,按其应该的方式锁定SQL表 第二个.executNonQuery引发错误: ExecuteOnQuery要求命令在 分配给该命令的连接位于挂起的本地事务中。 命令的事务属性尚未初始化 代码: 编辑 通过消除第二个连接,我能够使此事务正常工作。但是,两个查询都使用两个相同的变量SqlParameters。我被迫复制这些,以便运行时不会出错。他们有没有办法共享变量,这样我
通过消除第二个连接,我能够使此事务正常工作。但是,两个查询都使用两个相同的变量SqlParameters。我被迫复制这些,以便运行时不会出错。他们有没有办法共享变量,这样我就不必浪费空间重新创建它们了 一个事务不能跨越多个连接。。。cm.AcquireConnection是否每次都返回一个新连接?如果是,请尝试对两个命令使用相同的连接。使用transactionscope
using(TransactionScope ts = new TransactionScope())
{
using(SqlConnection conn = new SqlConnection(myconnstring)
{
conn.Open();
//call first executenonquery
//call second executenonquery
ts.Complete();
conn.Close();
}
}
我认为问题可能出在连接上,或者当您为第二次插入将命令设置为新命令时,您可以使用具有相同连接的两个不同命令,或者仅更改CommandText属性即可重用一个命令
希望这有助于 TransactionScope没有达到最佳性能。。。某些防火墙配置也可能存在问题。其他选项可能更合适。我很好奇,是什么迫使您使用现有SSIS OLE/ADO目标编写自己的插入逻辑?
using(TransactionScope ts = new TransactionScope())
{
using(SqlConnection conn = new SqlConnection(myconnstring)
{
conn.Open();
//call first executenonquery
//call second executenonquery
ts.Complete();
conn.Close();
}
}