岳不涛 2016-04-22 03:41 采纳率: 0%
浏览 1546

SQL server 数据库@@Error变量值如何返回

其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值
问题来了: 程序说没有有效的数据读入,应该怎么改?

  • 写回答

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对象遍历每一行并打印结果。

    评论

报告相同问题?