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