当从c执行SQL查询时,获取SQL查询的成功消息
本文关键字:SQL 查询 成功 消息 获取 执行 当从 | 更新日期: 2023-09-27 18:00:33
我正试图通过c#运行sql查询。我想要的是,当执行查询时,我应该得到1行受影响的消息。此外,我不想要这个数字,因为我想运行一个过程,并且其中可能有多个查询。
因此,
int rowsAffected = comand.ExecuteNonQuery() // This wont work
我的代码是这样的:
DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection("Data Source=(localdb)''Projects;Initial Catalog=SprocSystem;Integrated Security=True;");
string que = "insert into SprocParam values(1,'Int','Param5786',0,'desc')";
conn.FireInfoMessageEventOnUserErrors = true;
conn.Open();
conn.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
{
textMessages += "'n" + e.Message;
};
SqlCommand command = new SqlCommand(que, conn);
command.CommandType = System.Data.CommandType.Text;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = command;
da.Fill(ds);
每当出现约束错误时,我都会在textMessages变量中得到相应的输出,比如Primary Key Conflict。但是,如果查询完全正确,则textMessages为NULL。相反,我想要的是textMessage应该包含哪个表有多少行受到影响。
有人能帮忙吗。
对于存储过程,我必须这样做,因此我将无法修改查询。我只有存储过程的名称。
为了能够获得受影响的行数,您必须订阅命令上的StatementCompleted
事件,事件arg具有属性RecordCount
,该属性告诉每个语句受影响的记录数。
using (var sqlConnection = new SqlConnection(builder.ConnectionString))
{
sqlConnection.Open();
using (var sqlCommand = new SqlCommand(query, sqlConnection))
{
sqlCommand.StatementCompleted += sqlCommand_StatementCompleted;
sqlCommand.ExecuteNonQuery();
}
}
Console.ReadLine();
}
static void sqlCommand_StatementCompleted(object sender, StatementCompletedEventArgs e)
{
Console.WriteLine(e.RecordCount);
}
您可以添加@@ROWCOUNT
来实现这一点,例如将查询增加到:
insert into SprocParam values(1,'Int','Param5786',0,'desc')
SELECT @@ROWCOUNT
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were updated';
GO
有关的更多信息https://msdn.microsoft.com/en-us/library/ms187316.aspx
如果将SET NOCOUNT设置为ON,则ExecuteNonQuery返回0。尝试将其设置为OFF。