[英]SET NOCOUNT ON and reading messages using C# and ADO.NET
SET NOCOUNT ON停止顯示消息,該消息顯示受Transact-SQL語句或存儲過程影響的行數作為結果集的一部分返回。
a)如何使用C#和ADO.NET讀取這些消息(我假設讀取這些消息的C#代碼是相同的,而不管T-SQL語句是在存儲過程中,批處理中執行還是在……中執行)?
b)假設存儲過程包含多個語句,那么您的C#代碼如何識別特定消息所引用的SQL語句?
謝謝
信息消息(如受影響的行計數信息)通過SqlConnection.InfoMessage事件在ADO.Net中報告。 將委托添加到事件中,並且每當服務器傳輸參考消息(即嚴重性為10以下的任何錯誤消息)時,都將調用該委托。
沒有辦法將受影響的計數信息之類的信息性消息與源相關聯。 您將必須根據邏輯知識進行操作,並了解第一條消息是指第一次更新,第二條消息是指第二次更新,等等。
通常,依靠客戶端中受影響的行數是一種不好的做法。 啟用SET NOCOUNT ON時,ORM層(如NHibernate和ADO.Net數據集)會遇到許多問題,這恰恰說明了這種做法的問題。
不要依賴它 最佳做法是SET NOCOUNT ON
( 在此處與我的問題討論 )
看看這個問題和答案。 您必須在TSQL中添加一些代碼來捕獲@@ rowcount並以某種方式將其輸出(例如您可以讀取的結果集),才能完成上述(b)。
存儲過程中的一種選擇是包括將要傳遞回語句計數的變量。 您可以通過使用所需的OUTPUT參數創建過程來進行操作。
FIRST SQL HERE
@FirstSQLCount = @@ROWCOUNT
SECOND SQL HERE
@SecondSQLCount = @@ROWCOUNT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.