2010-09-14 73 views
2

我有確定性別的ddl,用戶可以不從ddl中選擇任何值,所以我試圖檢查用戶是否沒有從ddl inser空值或數據庫中的任何值中選擇任何值這一點,但錯誤apear(過程或函數 'InsertRegisteration' 需要參數 '@Gender_Id',這是不提供).ANY一個可以幫助我當從ddl沒有選定的值時插入空值

(我的代碼)

if (DDLGender.SelectedItem.Value[0]!= null) 
    { 
    command.Parameters.Add("@Gender_Id",SqlDbType.Int).Value=null; 
    } 
    else 
    { 
    command.Parameters.Add(Parameter.NewInt("@Gender_Id", DDLGender.SelectedValue)); 
    } 

回答

1

試試這個:

if (DDLGender.SelectedItem.Value[0]!= null) 
{ 
    command.Parameters.Add("@Gender_Id",SqlDbType.Int).Value= DBNull.Value; 
} 
else 
{  
    command.Parameters.Add(Parameter.NewInt("@Gender_Id", DDLGender.SelectedValue)); 
} 

新增nullSystem.DbNull.Value

的區別嘛,null沒有任何類型的實例。相反,這是一個無效的參考。

然而,System.DbNull.Value,是的System.DbNull實例(System.DbNull是獨立的,並System.DbNull.Value給你的那類的單一實例的引用),表示在數據庫中不存在*值的有效參考。

*我們通常會說null,但我不想混淆這個問題。

因此,這兩者之間存在很大的概念差異。關鍵字null代表無效的參考。類System.DbNull表示數據庫字段中不存在的值。一般來說,我們應該儘量避免使用相同的東西(在這種情況下爲null)來表示兩個非常不同的概念(在這種情況下,數據庫字段中的值是無效的,而不存在的值)。

請記住,這就是爲什麼很多人主張一般使用null object pattern,這正是System.DbNull的一個例子。

0

試試這個:

if (DDLGender.SelectedIndex == 0) 
{ 
    command.Parameters.Add("@Gender_Id", DBNull.Value); 
} 
else 
{ 
    command.Parameters.Add("@Gender_Id", (int)DDLGender.SelectedValue); 
} 

你不指定參數的數據類型。

0

假設你正在使用存儲過程進行更新, 我認爲你可以使存儲過程中的更改對此INT列的默認值爲NULL,這將使此參數爲可選。然後你可以在代碼中只執行ELSE部分。

0

可以上面的代碼行結合:

cmd.Parameters.Add(new SqlParameter { SqlDbType = SqlDbType.Int, Value = DDLGender.SelectedIndex!=0 ? (int)DDLGender.SelectedValue : null }); 

使用空合併運算符將做無效的檢查。如果selectedItem不爲null,那麼它將作爲值傳遞,否則將傳遞null。