簡體   English   中英

沒有命名參數的SqlCommand存儲過程

[英]SqlCommand stored procedure without a named parameter

我編寫了一個查詢解析器,該解析器應創建一個SqlCommand並執行一個存儲過程。 對存儲過程的查詢可以有多種形式,包括以下形式:

exec dbo.sp_StoredProcedureName 1599800

在這種情況下,我以這種方式創建SqlParameter:

var param = new SqlParameter() { Value = paramValue };

我收到一條錯誤消息,指出“ @ Parameter1”不是過程sp_StoredProcedureName的參數。

有沒有一種方法可以在不將其作為標准查詢運行的情況下執行此操作? 我想保持一致,並在可能的情況下將SqlCommand構建為StoredProcedure類型。

我在想也許我可以先反映存儲過程的參數名稱,但是想知道是否還有另一種方法。

盡管有一個用於SQLParameter的構造函數,但沒有設置名稱,但如果不設置ParameterName屬性,就不能真正使用SQLParameter

MSDN (重點是我的):

以@paramname形式指定ParameterName。 您必須在執行依賴參數的SqlCommand之前設置ParameterName。

在您的SP中,參數具有一個名稱,請查看查詢的定義以找到它。

如果事先不知道名稱是什么,請嘗試查詢sys.parameters表以查找特定存儲過程采用的參數。

最好調用存儲過程以指定哪個參數仍然是哪個參數(特別是如果有多個參數的話):

exec dbo.sp_StoredProcedureName @myParam = 1599800

在C#中,一旦知道參數的名稱,就可以按名稱添加它:

cmd.Parameters.AddWithValue("@myParam", 1599800);

當創建問題中指定類型的命令時,此命令將轉換為動態SQL查詢,該查詢與以下代碼段有些相似:

EXECUTE sp_executesql 'exec dbo.sp_storedprocName @FirstParam=value, ...'

在這里,@FirstName是在將參數添加到SqlCommand對象時指定的參數名稱。 如果不指定參數名稱,則無法創建這種類型的查詢。

您可以使用SQL Server分析器查看ADO.NET生成的查詢。 打開SQL Server分析器並查看查詢解釋是一個好習慣,因為它有助於避免我們在ADO.NET中編寫查詢時遇到的常見錯誤。

暫無
暫無

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

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