如何使用SqlConnection InfoMessage

时间:2015-12-17 04:08:50

标签: asp.net sql-server stored-procedures

我有这个调用存储过程的方法。我的问题是它不会返回一行,但它会打印一条消息。我试图将该打印消息捕获到变量中。我的问题是我之前从未使用过InfoMessage而且我在网上查看了它,对于我的生活,我似乎无法理解它。有人可以帮助我或指出我正确的方向吗?

这是我的代码:

public List<showWhatClass> showWhatMethod(string deviceWhat, int tagWhat, Decimal latit, Decimal longit, int Process, string CallNext, int CallNextVar)
{
    showWhatCell = new List<showWhatClass>();

    try
    {
        using (connection = new SqlConnection(connectionString))
        {
            using (SqlCommand command = new SqlCommand("iosShowWhat", connection))
            {
                command.CommandType = CommandType.StoredProcedure;

                command.Parameters.AddWithValue("@DeviceId", deviceWhat);
                command.Parameters.AddWithValue("@TagId", tagWhat);
                command.Parameters.AddWithValue("@Latitude", latit);
                command.Parameters.AddWithValue("@Longitude", longit);
                command.Parameters.AddWithValue("@Process", Process);
                command.Parameters.AddWithValue("@CallNext", CallNext);
                command.Parameters.AddWithValue("@CallNextVar", CallNextVar);

                connection.Open();

                /*SqlDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    showWhatClass item = new showWhatClass();
                    item.CallNext = reader.GetValue(0).ToString();
                    item.CallNextVar = (int)reader.GetValue(1);
                    showWhatCell.Add(item);
                }*/
            }
        }
    }
    finally
    {
        connection.Close();
    }

    return showWhatCell;
}

我尝试了以下内容:

connection.Open();

connection.InfoMessage += delegate(object sender, SqlInfoMessageEventArgs e)
{
    showWhatClass item = new showWhatClass();
    item.CallNext += "\n" + e.Message;
    showWhatCell.Add(item);
};

什么都不返回。

1 个答案:

答案 0 :(得分:1)

您可以使用output参数从存储过程中获取消息并在代码中使用它。

在存储过程中添加output参数

@name varchar(20) output

然后设置此参数的值

set @name='Mairaj Ahmad Minhas'

现在,在调用存储过程时,在代码中添加另一个这样的参数

command.Parameters.Add("@name", SqlDbType.VarChar, 20);
command.Parameters["@name"].Direction = ParameterDirection.Output;

在调用存储过程之后,执行此操作以从此参数获取值。

string name = command.Parameters["@name"].Value.ToString();