首页 > 解决方案 > 如果在 c# 中运行 sql 脚本时遇到 sql 异常,如何获取受影响的行数

问题描述

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

cmd.InternalRecordsAffected

cmd._rowsAffected

我已经尝试使用下面的代码和 PRINT 语句,但它不适用于我的情况:

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

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

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,但需要实际计数。

标签: c#sqlexceptionexecutenonquery

解决方案


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


推荐阅读