C# 我有5个使用存储过程的方法,我希望所有5个方法同时使用SqlTransaction

C# 我有5个使用存储过程的方法,我希望所有5个方法同时使用SqlTransaction,c#,asp.net,C#,Asp.net,我收到此错误消息:” 当分配给该命令的命令处于挂起本地 进程,ExecuteOnQuery要求命令具有一个进程 命令的命令属性尚未初始化。“我获取id 从第一种方法到其他4种方法 这是我的密码 SqlTransaction myTransaction; try { myconnection.Open(); KisiBilgiKaydet(); EgitimBilgiKaydet(); SinavBilgiKaydet(); ProgramBilgiKay

我收到此错误消息:”

当分配给该命令的命令处于挂起本地 进程,ExecuteOnQuery要求命令具有一个进程 命令的命令属性尚未初始化。“我获取id 从第一种方法到其他4种方法

这是我的密码

SqlTransaction myTransaction;
try
{
    myconnection.Open();

    KisiBilgiKaydet();
    EgitimBilgiKaydet();
    SinavBilgiKaydet();
    ProgramBilgiKaydet();
    BelgeKaydet();
    myTransaction.Commit();
    myconnection.Close();
}
catch (Exception ex)
{
    myTransaction.Rollback();
    myconnection.Close();
}

如果您想使用
SqlTransaction
,那么这很好,但是您需要将事务以的形式传递给每个方法(或者以其他方式使其可用),并且每个方法中的代码都需要显式地使用该事务和连接。但原则上:好,玩得开心


还有环境事务,即
TransactionScope
——使用起来更简单,但a:在.NET Core上不起作用,b:有升级到MSDTC事务的坏习惯(即:坏)。就个人而言:我只是将事务传入。

您应该将事务以您需要的所有方法放入每个SqlCommand中:

SqlTransaction  transaction;

try
{
    myconnection.Open();
    transaction = myconnection.BeginTransaction();

    KisiBilgiKaydet(transaction);
    EgitimBilgiKaydet(transaction);
    SinavBilgiKaydet(transaction);
    ProgramBilgiKaydet(transaction);
    BelgeKaydet(transaction);
    transaction.Commit();
    myconnection.Close();
}
catch (Exception ex)
{

    transaction.Rollback();    
    myconnection.Close();
}
并确保在以下方法中使用事务:

private void sqlMethod(SqlTransaction transaction)
{
    var cmd = new SqlCommand(sqlQuery, connection, sqlTransaction);
}

@LorenzoIsidori啊,很公平,我一定是记错了早期的.NET核心版本。。。或者它可能不包括所有场景(LTM/DTC/etc)?嗯,没关系。。。