2012-04-17 55 views
2

我正在處理WCF服務,其中我試圖從傳遞給該方法的一個數據表中將數據加載到本地的另一個數據表中數據庫(在本例中,「本地」數據庫是Windows 2003 Server上的SQL Server數據庫)。當我這樣做時,我收到以下錯誤消息:獲取「表<table>的<column>的值爲DBNull」錯誤

「表'ASIVocationalNeeds'中'VocNeedDesc'列的值爲DBNull。」

這實際上沒問題,因爲表ASIVocationalNeeds中的列VocNeedDesc允許空值。最初我只是從傳入的表中將VocNeedDesc的值分配給本地表,但我得到了這個錯誤。所以接下來我更改我的代碼來檢查VocNeedDesc的值是否爲空,如果是這樣,我將string.Empty賦值給值,否則我賦值傳遞值,但仍然收到錯誤消息。我很難過;不知道爲什麼我得到這個錯誤。以下是相關代碼段:

localEmploy.ASIVocationalNeeds.Rows.Add(clientNumber, 
    caseNumber, 
    0, 
    EmploymentDataSet.ASIVocationalNeeds[i].VocNeedType, 
    (EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == null ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc)); 

回答

4

DBNull的檢查適用於單元格值不是整列

那麼試試這個

EmploymentDataSet.ASIVocationalNeeds.Rows[i]["VocNeedDesc"] == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc)); 

如果你正在使用typeDatset 您可以檢查空值爲

((ASIVocationalNeedsRow)EmploymentDataSet.ASIVocationalNeeds.Rows[i]).isVocNeedDescnull() ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc)); 
+0

我正在使用一個打字的數據集,所以我想我會試一試你的建議。我現在在EmploymentDataSet.ASIVocationalNeeds數據表上使用IsVocNeedDescNull()方法。在測試它的工作!但是,當我編譯它並將其放在服務器上時,我仍然得到「ASIVocationalNeeds'表中的列'VocNeedDesc'的值爲DBBull。」錯誤信息。爲什麼在Windows 2003 R2服務器上作爲WCF服務運行有所作爲? – Rod 2012-04-18 19:39:49

+0

沒關係。我發現在一個不同的條件下,我做了同樣的任務,從EmploymentDataSet.ASIVocationalNeeds [i] .VocNeedDesc中拉出來,因爲我不應該這樣做。在我發佈的代碼上方只有15行。哎呀!我怎麼想的? – Rod 2012-04-18 20:08:20

0

您是否試過將它與DBNull.Value進行比較?

代碼可能看起來類似

EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc == DBNull.Value ? string.Empty : EmploymentDataSet.ASIVocationalNeeds[i].VocNeedDesc)); 
+0

不,我沒有。我只是試了一下,我得到一個警告說,「運算符'=='不能應用於'string'和'System.DBNull'類型的操作數」。然而,它確實給了我一個想法,我會嘗試使用string.IsNullOrEmpty()方法。 – Rod 2012-04-17 18:54:54

+0

不幸的是,使用string.IsNullOrEmpty()方法調用不起作用。 – Rod 2012-04-17 20:08:05

相關問題