.net core .NET核心&x2B;弹性交易&x2B;SqlBulkCopy;“意外的现有交易”;发生异常

.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

我正在使用.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[] 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();
                }
            }

谢谢你的回复!使用嵌套事务,它工作正常。