2010-07-29 59 views
1

我有一個字符串,可以是空的,如果它不是空的,它包含一個XML文檔。問題是在DataType System.String的此數據集列中允許使用空值。DataSet列可以爲NULL,但不能轉換爲字符串?

錯誤消息:this.MetaData」扔類型的異常 'System.Data.StrongTypingException'

基{System.SystemException} = {「爲列中的值 '邁德特' 表 'GMyTAbleName' 是的DBNull 「}

UPDATE

這裏是事業的截圖:

http://666kb.com/i/bld3eelnaicsgb9tv.png

你會看到它如何嘗試將NULL轉換爲應該返回的字符串。

該代碼是從DataSet.Designer.cs文件,我怎麼可能改變這種行爲? :S

回答

0

考慮首先在DataRow上使用IsNull方法測試色譜柱。

我從來不喜歡的DBNull。 :)

+0

即使我會測試,有alreay數據集中這樣的測試,但是當其空和允許爲空,問題是該數據集不能零轉換爲空字符串,那是什麼該錯誤說。 – msfanboy 2010-07-30 06:16:00

+0

@msfanboy:我明白你的意思。這個想法是,你保護自己不要訪問強類型列,直到你確定它不是null爲止,因爲如果你曾經在get null時訪問getter,你就會得到一個StrongTypingException。我知道這很乏味,避免DBNull是我採納LINQ的原因之一,因此速度很快。 – kbrimington 2010-07-30 06:27:29

+0

THX爲你歡呼起來,我喜歡LINQ的太多,但不能老是在這裏使用它:/ 我更新了第一篇文章與該問題的屏幕截圖! – msfanboy 2010-07-30 08:39:33

0

好,我做它的工作。我將在這裏列出的步驟:

1)http://msdn.microsoft.com/en-us/library/ya91ataz(vs.71).aspx

選擇這樣的:(空)有空值返回爲的String.Empty。

2.)正如我們現在的一個string.empty不是一個有效的xml字符串,我在適當的屬性的getter中檢查了這一點。

private XmlDocument XMLMyData 
{ 
    get 
    { 
     XmlDocument doc = new XmlDocument();  

     if (this.MyData.Trim().Length > 0) 
      doc.LoadXml(this.MyData); // return xml-string in the xml document 
     else if (String.IsNullOrEmpty(this.MyData)) 
      return doc;    // return empty xml document 

     return doc;          
    } 
}