.net core .NET核心&x2B;弹性交易&x2B;SqlBulkCopy;“意外的现有交易”;发生异常
我正在使用.NETCore2.1.2 我使用SQL Database for DB并运行以下代码,第二个sqlbulk.WriteToServer引发“意外的现有事务”异常.net core .NET核心&x2B;弹性交易&x2B;SqlBulkCopy;“意外的现有交易”;发生异常,.net-core,azure-sql-database,.net Core,Azure Sql Database,我正在使用.NETCore2.1.2 我使用SQL Database for DB并运行以下代码,第二个sqlbulk.WriteToServer引发“意外的现有事务”异常 using System; using System.Data; using System.Data.SqlClient; using System.Transactions; namespace sqldb { class Program { static void Main(string
using System;
using System.Data;
using System.Data.SqlClient;
using System.Transactions;
namespace sqldb
{
class Program
{
static void Main(string[] args)
{
var constr = new SqlConnectionStringBuilder(){
DataSource = "xxxxxxxx.database.windows.net",
UserID = "xxxxxxx",
Password = "xxxxxx"
};
using (var scope = new TransactionScope()){
constr.InitialCatalog = "DB1";
var dtable = new System.Data.DataTable();
dtable.TableName = "T1";
dtable.Columns.Add("C1");
var drow = dtable.NewRow();
drow["C1"] = 1;
dtable.Rows.Add(drow);
using (var con = new SqlConnection(constr.ToString())){
con.Open();
var sqlbulk = new System.Data.SqlClient.SqlBulkCopy(con);
sqlbulk.DestinationTableName = "T1";
sqlbulk.WriteToServer(dtable);
}
constr.InitialCatalog = "DB2";
using (var con = new SqlConnection(constr.ToString())){
con.Open();
var sqlbulk = new System.Data.SqlClient.SqlBulkCopy(con);
sqlbulk.DestinationTableName = "T1";
sqlbulk.WriteToServer(dtable);
}
scope.Complete();
}
}
}
}
我对每个数据库执行以下查询,并确认弹性事务的状态,它被注册为DTC
SELECT * FROM sys.dm_tran_active_transactions
在事务范围内,使用sqlbulkcopy将数据插入到SQL数据库的多个DBs中似乎会导致错误,但是否有一些解决方法?
(在事务范围中,使用多个SqlBulkCopy为同一个db插入数据/使用多个db简单插入工作正常)看起来SqlBulkCopy与System.Transactions混淆了。当您的SqlConnection已经登记在System.Transactions.Transaction中时,您可以使用SqlConnection.BeginTransaction启动一个“嵌套”事务,并将该事务传递给SqlBulkCopy。乙二醇
using (var con = new SqlConnection(constr.ToString()))
{
con.Open();
using (var tran = con.BeginTransaction())
{
var options = new SqlBulkCopyOptions();
var sqlbulk = new SqlBulkCopy(con,options,tran);
sqlbulk.DestinationTableName = "T1";
sqlbulk.WriteToServer(dtable);
tran.Commit();
}
}
谢谢你的回复!使用嵌套事务,它工作正常。