如何获得受影响的行数,如果它在 c# 中的 运行 sql 脚本中遇到 sql 异常

How to get the number of rows affected, if it hits sql exception while running the sql script in c#

如果 ExecuteNonQuery() 命中 SqlException,我需要获得受影响的行数。在 C# 中调试时,我能够看到受影响的行数,但无法看到,比如-

cmd.InternalRecordsAffected

cmd._rowsAffected

我已经尝试将以下代码与 PRINT 语句一起使用,但它不适用于我的情况:

conn.InfoMessage += delegate (object sender, SqlInfoMessageEventArgs e)
{
     sqlMessage += "\n" + e.Message;
};

我们的应用程序是 运行 sql 使用 c# 的脚本。下面是示例代码:

int rowsAffected = -1;

using (SqlConnection conn = new SqlConnection(connectionString))
{
    if (conn != null && conn.State != ConnectionState.Open)
    {
        conn.Open();
    }
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        StreamReader reader = new StreamReader(strFilePath);
        string sqlQuery = reader.ReadToEnd();
        cmd.CommandText = sqlQuery;
        try
        {
            rowsAffected = cmd.ExecuteNonQuery();
        }
        catch (SqlException ex)
        {
            //How to get the number of rows affected here?
        }
        if (conn.State != ConnectionState.Closed)
        {
            conn.Close();
        }
    }
}

异常,获取 rowsAffected 为 -1,但需要实际计数。

我最终得到了在每个 sql 语句后添加 'GO' 并在 运行 c# 脚本文件中拆分的解决方案,因此,我将获得受影响的行,直到发生异常,其余查询将不会执行。