2010-07-29 3 views
1

У меня есть строка, которая может быть пустой, если ее не пусто, она содержит XML-документ. Проблема заключается в том, что в этом столбце набора данных DataType System.String допустимы значения NULL.Столбец DataSet может быть NULL, но не преобразован в строку?

Сообщение об ошибке: this.MetaData»сгенерировала исключение типа '' System.Data.StrongTypingException

основания {System.SystemException} = {" Значение для столбца 'MyData' в таблице 'GMyTAbleName' является DBNull . "}

UPDATE

вот скриншот причины:

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

вы видите, как он пытается преобразовать NULL в строку, которая должна быть возвращена.

Этот код из файла DataSet.Designer.cs, как я могу изменить это поведение? : S

ответ

0

Рассмотрите возможность тестирования колонки сначала с использованием метода IsNull на DataRow.

Я никогда не любил DBNull. :)

+0

даже если бы я проверить, что есть alreay такой тест в наборе данных, но когда его Null и его позволено быть пустым, проблема в том, что набор данных не может преобразовать нуль в пустую строку, вот что ошибка сказала. – msfanboy

+0

@msfanboy: Я принимаю ваше решение. Идея состоит в том, что вы защищаете себя от доступа к строго типизированному столбцу, пока не убедитесь, что он не является нулевым, потому что вы знаете, что получите исключение StrongTypingException, если вы когда-либо обращаетесь к получателю при его нулевом значении. Это утомительно, я знаю; избегая DBNull является частью того, почему я принял LINQ так штопать быстро. – kbrimington

+0

thx для ваших приветствий. Мне нравится Linq тоже, но не могу использовать его здесь:/ Я обновил первое сообщение с скриншотом этой проблемы! – msfanboy

0

ok Я сделал это работающим. Я перечислю шаги здесь:

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

выбирают это: (Empty) Для того, чтобы иметь нулевые значения возвращения 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;          
    } 
} 
Смежные вопросы