簡體   English   中英

設置NOCOUNT ON並使用C#和ADO.NET閱讀消息

[英]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以下的任何錯誤消息)時,都將調用該委托。

沒有辦法將受影響的計數信息之類的信息性消息與源相關聯。 您將必須根據邏輯知識進行操作,並了解第一條消息是指第一次更新,第二條消息是指第二次更新,等等。

通常,依靠客戶端中受影響的行數是一種不好的做法。 啟用S​​ET NOCOUNT ON時,ORM層(如NHibernate和ADO.Net數據集)會遇到許多問題,這恰恰說明了這種做法的問題。

不要依賴它 最佳做法是SET NOCOUNT ON在此處與我的問題討論

  • 加載數據表時,請使用.Count。
  • 使用OUTPUT參數傳回@@ ROWCOUNT(或作為數據集)

看看這個問題和答案。 您必須在TSQL中添加一些代碼來捕獲@@ rowcount並以某種方式將其輸出(例如您可以讀取的結果集),才能完成上述(b)。

存儲過程中的一種選擇是包括將要傳遞回語句計數的變量。 您可以通過使用所需的OUTPUT參數創建過程來進行操作。

FIRST SQL HERE
@FirstSQLCount = @@ROWCOUNT

SECOND SQL HERE
@SecondSQLCount = @@ROWCOUNT

暫無
暫無

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

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