我正在尝试编写一种方法,使用户可以以字符串数组格式传递多个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=...)块内部。

09-20 09:27