2011-03-03 75 views
7

如何執行一個無需指定參數名稱即可接受參數的存儲過程?存儲過程中參數的名稱可能會從CustomerID更改爲CustID,所以我不想不斷更改我的代碼。C#在沒有指定參數名稱的情況下運行一個程序

,而不是做下面是什麼,你指定參數名提供 -

command.Parameters.Add("@dtStart", SqlDbType.DateTime); 
command.Parameters["@dtStart"].Value = startDate; 
command.Parameters.Add("@CustomerID", SqlDbType.NChar); 
command.Parameters["@CustomerID"].Value = customerID; 

我希望做這樣的事情 -

command.Parameters.Add(startDate, customerID); 
+3

只是好奇,莫非是SP還是工作,如果你不設置參數的名字?如果您需要在創建後修改值,您可以通過它們的索引引用它們:0,1等。如果重新排序SP的參數,您當然必須更改代碼。 – jonathanpeppers 2011-03-03 14:12:42

+0

有一個談話,他們決定不再改變參數名稱,所以傳統的方式在我的工作。起初,我一直在尋找一種解決方案,你可以使用類似於你所陳述的索引。 – m0g 2011-03-15 14:33:03

回答

16

在存儲過程中可以從客戶ID更改參數的名稱CUSTID

摑誰做的人。

參數名稱是識別參數的可靠方法。另一種選擇是序列,看起來更加片狀。

+3

+1不錯的答案。SLAP !!! – 2011-03-03 14:20:33

+0

同意!但是在這樣的應用程序中有一段時間,我們需要在各個參數的順序中發送值的地方。作爲解決辦法,我們必須使用「exec」並在命令文本中使用參數編寫存儲過程名稱 – Sutirth 2016-01-05 10:44:54

+0

來自gandhi的土地我會建議採用非暴力方式並且不要使用人身暴力。代之以做非暴力的蠟燭遊行。 – 2017-09-18 09:22:57

-2

你可以使用SQL的exec,這不詢問參數名稱:

command.CommandText = string.Format(
    "exec dbo.YourProcedure {0}, '{1}'", 
    intParameter, 
    stringParameter.Replace("'","''") 
); 
command.ExecuteNonQuery(); 

如果您的參數源是未知的不可否認,請務必在字符串參數中跳出單引號。在上面的代碼片段中完成了stringParameter

5

我不認爲你可以不指定名稱創建一個SqlParameter對象。但是,您應該能夠使用DeriveParameters方法(see MSDN)獲取具有從SQL服務器自動取回的名稱的參數集合。

你可以找到一個example here。它看起來大致是這樣的:

SqlCommand command = // create a command for calling the stored procedure 
SqlCommandBuilder.DeriveParameters(command); 

// Now you can set values of parameters in a loop 
for(int i = 0; i < command.Parameters.Length; i++) { 
    var parameter = command.Parameters[i] 
    // Set value of ith parameter 
} 
0

如果你強迫它的名稱爲空或空它被添加到參數集合,這樣的事情你可以創建一個無名的SQL參數:

var par = cmd.CreateParameter(); 
par.Value = myValue; 
cmd.Parameters.Add(par); // this will change the name to "ParameterX" 
par.ParameterName = null; 
相關問題