2011-06-24 13 views
1

假設我在SQL Server中的存儲過程使用名稱sp_GetData1使用參數:SQL Server&.net支持用param的值調用存儲過程而不提供參數名稱?

@Input1 int 
@Input2 string 

此存儲過程將返回一個數據表。爲了從這個存儲過程獲得數據,我使用ADO.NET。爲了執行這個存儲過程,我們必須提供param'name,param's sqldatatype,& param'value

我有問題:我們可以執行此存儲過程(使用ADO.NET)而不提供參數的名稱& param的sqldatatype?這意味着,我只需要按順序提供參數值。

謝謝。

+2

你想在這裏解決什麼問題? –

回答

5

一種方法來安全地執行一個存儲過程,而不直接指定的名稱,方向和類型參數是使用SqlCommandBuilder.DeriveParameters

這將從服務器amd中檢索參數爲您創建SQLParameter集合。您仍然需要在命令上填充參數集合上的值。

...I'm assuming a variable cmd with the command string and connection property set 
SqlCommandBuilder.DeriveParameters(cmd); 
cmd.Parameters[0].Value = input1; 
cmd.Parameters[1].Value = input2; 

沒有爲打算到服務器的性能損失,但至少你不必擔心SQL注入

老提供SQLHelper這樣做和緩存的參數,因此只能做一次。企業圖書館也會這樣做。完整的ORMs也會爲你做類似的事情。

0

可以始終使用命令對象的comandText屬性,並以下面的方式執行該SP:

SqlConnection connection = new SqlConnection("My connection string value here"); 
DataSet ds = new DataSet(); 
SqlCommand command = new SqlCommand(); 
command.CommandText = string.Format("exec storedProcedureName {0},{1}", 1, 2); 
SqlDataAdapter adapter = new SqlDataAdapter(command); 
adapter.Fill(ds); 
+2

讓我們只希望@ Input2不是'; Drop Database master;'即使對於好的數據也不行,因爲@ input2需要用單引號分隔 –

相關問題