[英]SQL Server stored procedure no statements run when from RPC
我有一個帶有存儲過程的SQL Server 2000數據庫,該存儲過程在給定其id的情況下從特定表中刪除一行。 當我從VB.NET調用存儲過程時,它不會刪除該行,而是通過SSMS直接在數據庫上運行相同的腳本,它可以工作。
這是我的一系列事件:
為什么通過RPC運行它使它不執行proc中的任何語句,但直接運行應該如此?
編輯:下面是我的VB.NET代碼。 這與我們在其他100多個地方使用的代碼相同:
Dim paramRowID As New SqlParameter("@RowID", sRowID)
Microsoft.ApplicationBlocks.Data.SqlHelper.ExecuteNonQuery(oConn, "spDeleteRow", paramRowID)
請在此處查看SqlHelper源代碼。
編輯:我現在討厭自己。 :) SQL拋出異常“nvarchar與圖像不兼容”有關我傳遞NULL的另一個參數。 SSMS並不擔心這種類型,但VB.NET確實沒有明確告訴它它是類型圖像。 一旦我定義了那個參數,它就起作用了。 我希望探查者會告訴我有一個錯誤。
任何幫助,將不勝感激,
格雷格
那是因為SSMS不會調用RPC而是調用批處理。 實際上無法從SSMS調用RPC,因為您無法聲明參數 ,這是區分RPC調用與TDS中的批調用的區別:
2.2.1.3 SQL批處理要發送SQL語句或一批SQL語句,將由Unicode字符串表示的SQL批處理復制到TDS數據包的數據部分,然后發送到支持SQL的數據庫服務器。 SQL批處理可能跨越多個TDS數據包。 有關其他詳細信息,請參見第2.2.6.6節
2.2.1.5遠程過程調用要在服務器上執行遠程過程調用(RPC),客戶端會將RPC消息數據流發送到服務器。 這是一個二進制流,包含RPC名稱或數字標識符,選項和參數 。 RPC必須位於單獨的TDS消息中,而不是與SQL語句混合。 一條消息中可以有多個RPC。 有關其他詳細信息,請參見第2.2.6.5節。
因此,請監視SQL:BatchCompleted
事件,您將看到您的SSMS語句。
應用程序用於連接到sql的用戶是否有權執行存儲過程? 這是我要驗證的第一件事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.