2013-10-19 44 views
0

我正在使用存儲過程來獲取詳細信息。錯誤SqlParameter名稱爲空

在該存儲過程中4個參數定義

BAL層

Sqlparameter[] param=new SqlParameter[4]; 
param[0]=new Sqlparameter("@one",Uname); 
param[3]=new SqlParameter("@three",Pass); 

ds=dal.getdetails("spname",param); 
return ds; 

DAL層

public DataSet getdetails(string spname,SqlParameter[] param); 
{ 
     // here when i retrive the parameter sent by the BAL Layer, 
     //I retreive in this format 
     param={"@one",null,null,"@three"} 
     // it throw me error... 
     // what code i have to write here... 
} 

如何使用只有那些我需要在SELECT語句的參數...

我的插入和選擇查詢是在相同的存儲過程。

+1

如果這些參數沒有在存儲過程中指定的默認值空通db.null值,則需要在通過他們,即使你只是設置值爲null。 – ps2goat

+0

這意味着現在我必須將默認值設置爲存儲過程參數。 – Manoj

+0

*我的插入和選擇查詢是在相同的存儲過程* - 這似乎是一個非常糟糕的主意。任何程序都應該有一個任務 - 只有一個任務。如果你需要一個'INSERT' - 創建一個插入過程。如果你需要一個'SELECT',創建一個單獨的選擇程序。通過這樣做,您只需要傳遞每個任務實際需要的參數。 –

回答

3

您需要傳遞所有參數。

如果該值是在參數DBNull.Value;

Sqlparameter[] param=new SqlParameter[4]; 
param[0]=new Sqlparameter("@zero",Uname); 
param[1]=new Sqlparameter("@one",DBNull.Value); 
param[2]=new Sqlparameter("@two",DBNull.Value); 
param[3]=new SqlParameter("@three",Pass); 

ds=dal.getdetails("spname",param); 
return ds; 
+0

我已經嘗試過這些東西......但這裏的參數名稱爲null,並且它會將我引起錯誤。 – Manoj

+0

okkk,我明白了謝謝!!!! – Manoj

+0

@Manoj做到了嗎? –

相關問題