其cmd的sql语句为:
private const string SQL_INSERT_ORDER = "Declare @ID int; Declare @ERR int;
INSERT INTO Orders VALUES(
@BillAddress1, @BillAddress2, @BillCity, @BillState, @BillZip, @BillCountry,(。。省略若干值。。) 'U');
SELECT @ID=@@IDENTITY; INSERT INTO OrderStatus VALUES(@ID, @ID, GetDate(), 'P'); SELECT @ERR=@@ERROR;";
INSERT INTO LineItem VALUES( "@ID, @LineNumber0,@ItemId0, @Quantity0,@Price0); SELECT @ERR=@ERR+@@ERROR;
我目前需要读出@ERR自定义变量的值,网上提供的c# 代码如下:
var cmd = new sqlcommand(..);
cmd.executenonquery();--先执行sql语句。
using (SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//Read the returned @ERR
rdr.Read();
// If the error count is not zero throw an exception
if (rdr.GetInt32(1) != 0)
throw new ApplicationException("DATA INTEGRITY ERROR ON ORDER INSERT - ROLLBACK ISSUED");
}--读取@err值
问题来了: 程序说没有有效的数据读入,应该怎么改?
SQL server 数据库@@Error变量值如何返回
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
你知我知皆知 2024-08-05 11:15关注以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
要获取
@ERR变量的值,你需要在执行SQL语句之前设置CommandBehavior.CloseConnection参数。这将确保在尝试执行SQL时关闭连接,并且不会出现错误。以下是修改后的C#代码示例:
private const string SQL_INSERT_ORDER = "Declare @ID int; Declare @ERR int; INSERT INTO Orders VALUES( @BillAddress1, @BillAddress2, @BillCity, @BillState, @BillZip, @BillCountry, --省略若干值-- 'U'); SELECT @ID=@@IDENTITY; INSERT INTO OrderStatus VALUES(@ID, @ID, GetDate(), 'P'); SELECT @ERR=@@ERROR;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand(SQL_INSERT_ORDER, connection)) { command.CommandTimeout = 60; command.Parameters.AddWithValue("@BillAddress1", "Test"); command.Parameters.AddWithValue("@BillAddress2", "Test"); command.Parameters.AddWithValue("@BillCity", "Test"); command.Parameters.AddWithValue("@BillState", "Test"); command.Parameters.AddWithValue("@BillZip", "Test"); command.Parameters.AddWithValue("@BillCountry", "Test"); //省略其他参数 command.ExecuteNonQuery(); using (SqlDataReader reader = command.ExecuteReader()) { while(reader.Read()) { Console.WriteLine($"ID: {reader.GetInt32(0)}"); break; } } connection.Close(); } }在这个例子中,我们首先打开数据库连接,然后创建一个新的命令并设置命令超时。然后,我们将所有参数传递给命令,并使用
ExecuteNonQuery()方法执行SQL。最后,我们使用Reader对象遍历每一行并打印结果。解决 无用评论 打赏 举报