c# - 如果在 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,但需要实际计数。
解决方案
我最终得到了在每个 sql 语句之后添加“GO”并在 C# 中运行脚本文件时将其拆分的解决方案,因此,我将获得受影响的行数,直到发生异常并且其余查询将不会执行.
推荐阅读
- javascript - vue-cli 项目中 Highcharts-vue 中的股票图表:数据分组不起作用
- ios - 有没有办法检查应用程序中的损坏链接?
- python - Python 虚拟环境未列出已安装的包
- sql - 如何连接两个表(均来自自连接)以创建第三个表?
- oauth - BitBucket Rest API OAuth2:如何使用客户端凭据授予
- html - Bootstrap ~3.7 和最新 Bootstrap (4) 之间简单代码的样式问题
- c - LoRaWAN OTAA 协议规范
- java - CN1:滚动在 MultiButton 上不起作用
- node.js - 我无法切换 node.js 版本
- ios - Sprite 套件中的 SKShapeNode 碰撞检测未检测到碰撞