簡體   English   中英

ASP.NET-SqlConnection InfoMessage顯示倍數

[英]ASP.NET - SqlConnection InfoMessage Displaying multiples

我正在從正在編寫的Web應用程序中單擊時運行SQL Server存儲過程。 該存儲過程可能返回一些消息,並且該消息需要在應用程序中顯示。 但是,該消息正在打印多次。

這是我的代碼片段:

    protected void conn_InfoMessage(object sender, SqlInfoMessageEventArgs e)
    {
        lbxMessage.Items.Add(e.Message);
    }

    protected void btnTest_Click(object sender, EventArgs e)
    {
        lbxMessage.Items.Clear();

        String ConnString = "MyConnectionString"
        SqlConnection conn = new SqlConnection(ConnString);

        SqlCommand cmd = new SqlCommand();
        cmd.Connection = conn;
        cmd.CommandTimeout = 300;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "uspTest";

        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = cmd;

        conn.Open();
        conn.InfoMessage += new SqlInfoMessageEventHandler(conn_InfoMessage);
        cmd.ExecuteNonQuery();
        da.Fill(ds);
        conn.Close();
    }

在此示例中, uspTest僅打印“ TEST”,而顯示它的列表框顯示“ TEST TEST”

該代碼兩次調用存儲過程。 一次da.Fill(ds)填充數據集,一次調用ExecuteNonQuery

問題代碼中的任何地方都沒有使用數據集,這意味着可以通過以下方式重寫代碼:

var cmd = new SqlCommand
{
    CommandText = "uspTest",
    CommandTimeout = 300,
    CommandType = CommandType.StoredProcedure
};
using (var conn = new SqlConnection(ConnString))
{
    conn.Open();                
    conn.InfoMessage += Conn_InfoMessage;


    cmd.Connection = conn;
    cmd.ExecuteNonQuery();                
}

using塊確保即使發生異常也將關閉連接。

如果存儲過程返回並返回結果,則不應使用ExecuteNonQuery 該代碼應如下所示:

var cmd = new SqlCommand
{
    CommandText = "uspTest",
    CommandTimeout = 300,
    CommandType = CommandType.StoredProcedure
};
var da = new SqlDataAdapter
{
    SelectCommand = cmd
};
using (var conn = new SqlConnection(ConnString))
{
    conn.Open();                
    conn.InfoMessage += Conn_InfoMessage;

    var ds = new DataSet();
    cmd.Connection = conn;
    da.Fill(ds);
    //Do something with the dataset
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM