我有我的網頁上的一些文本框,因爲它們是可選的,可以是空的,我有這個DAL代碼傳遞DBNull.Value和空文本框的值到數據庫
parameters.Add(new SqlParameter("@FirstName", FirstName));
parameters.Add(new SqlParameter("@LastName", LastName));
parameters.Add(new SqlParameter("@DisplayName", DisplayName));
parameters.Add(new SqlParameter("@BirthDate", BirthDate));
parameters.Add(new SqlParameter("@Gender", Gender));
任意字段可以爲空。問題是,當他們是空的,我收到Procedure XXX requires @FirstName which was not supplied
然後,我改變了我的代碼
parameters.Add(new SqlParameter("@FirstName", String.IsNullOrEmpty(FirstName) ? DBNull.Value : (object)FirstName));
parameters.Add(new SqlParameter("@LastName", String.IsNullOrEmpty(LastName) ? DBNull.Value : (object) LastName));
parameters.Add(new SqlParameter("@DisplayName", String.IsNullOrEmpty(DisplayName) ? DBNull.Value : (object) DisplayName));
parameters.Add(new SqlParameter("@BirthDate", BirthDate.HasValue ? (object)BirthDate.Value : DBNull.Value));
parameters.Add(new SqlParameter("@Gender", String.IsNullOrEmpty(Gender) ? DBNull.Value : (object) Gender));
但由於三元語句需要兩個值是相同的類型,這看起來凌亂我尤其是鑄件object
。
爲什麼數據庫中的空字符串或空字符串未被處理NULL
?如果我必須將其轉換爲DBNull.Value
有沒有更清晰的方法?將值保存爲數據庫中的空字符串可能會有所幫助,但在數據庫中查詢NULL
也會產生混亂
請給出關於常見實踐或與之相關的建議。
我沒有訪問命令對象的權限,因爲我將它抽象爲一個Base類,所以我可以將它用於多個數據庫[避免依賴特定數據庫]。我喜歡擴展方法方法。謝謝。 – codingbiz
我覺得'DbNullIfNull'有問題。我無法理解那裏的邏輯,所以我將它輸入到.NET 4.0項目中,這肯定是錯誤的!我的猜測是你打算編寫'return(obj!= null)? obj:DBNull.Value;'而不是'返回obj? = null? obj:DBNull.Value;'只是一個參考。 – jp2code
@ jp2code:當然,這只是一個錯字。謝謝!固定。 – abatishchev