我正在尝试编写一种方法,使用户可以以字符串数组格式传递多个sql语句。并创建交易。必要时回滚。目前,我收到一条错误消息,说该事务需要一个命令来执行。任何建议,将不胜感激,也许是我需要做的另一种(或正确的)方法。以下是现有代码。
public bool Scalar(params string[] sqlTexts)
{
SqlTransaction tran = null;
try
{
using (SqlConnection connection = new SqlConnection(strConnectionString)) // Auto dispose of connection
{
connection.Open(); // Open the connection
using (tran = connection.BeginTransaction())
{
using (SqlCommand cmdCommand = connection.CreateCommand()) // Auto dispose of command
{
foreach (string currentSQL in sqlTexts)
{
cmdCommand.CommandText = currentSQL;
cmdCommand.ExecuteScalar();
}
}
tran.Commit();
}
}
return true;
}
catch (Exception)
{
if (tran != null)
tran.Rollback();
return false;
}
}
最佳答案
您需要先将事务传递给命令,然后再执行它:
cmdCommand.Transaction = tran;
此外,您可能需要小心。您在
using
块中是tran
事务try
,但随后在catch
块中对其进行引用。我建议将try / catch移到using(tran=...)
块内部。