![](/img/trans.png)
[英]SqlConnection InfoMessage not working with BeginExecuteNonQuery
[英]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.