2013-07-05 2 views
0

У меня есть таблица базы данных, какDBNull ошибка придумывает

FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden 

Теперь я также создал хранимую процедуру, как,

CREATE procedure [dbo].[GetFruitCrate] 
(
    @FruitCrateID int, 
    @FruitCrateName varchar(222) 
) 
AS 

SELECT 
    * 
FROM 
    FruitCrateTable 
WHERE 
    FruitCrateID = @FruitCrateID 
and 
    FruitCrateName = @FruitCrateName 

Теперь, когда я пытаюсь проверить, если FruitGarden является недействительным или не используется DataAccess,

Я создал экземпляр строки, как,

public myDataAccess.DataAccess.GetFruitCrateRow fruitCrateRow; 
//then 

if (!string.IsNullOrEmpty(fruitCrateRow.FruitGarden)) 
      { 
//do something but i am getting error, how can i fix this issue ? 
else { // do something else } 

Ошибка

The value for column &#39;FruitGarden&#39; in table &#39;GetFruitCrate&#39; is DBNull.</message><full>System.Data.StrongTypingException: The value for column &#39;FruitGarden&#39; in table &#39;GetFruitCrate&#39; is DBNull. ---&gt; System.InvalidCastException: Unable to cast object of type &#39;System.DBNull&#39; to type &#39;System.String&#39;. 

Я оставил фруктовый сад, как Null, как это может быть пустым

Update

при попытке fruitCrateRow.FruitGarden! = DBNull.Value я получаю Оператор ошибок '! =' Не может применяться к операндам типа 'string' и 'System.DBNull

+0

Ваш ХП является '[DBO] [GetFruitCrate]', но вы звоните 'GetFruitCrateRow'? –

+0

@PatLillis Я переименовал свой сценарий – Mathematics

ответ

3

DBNull - это не то же самое, что и null.Попробуйте с

if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
    fruitCrateRow.FruitGarden != "") 
+0

работал на меня до сих пор, спасибо – Mathematics

5

Ну, как указано в Exception, fuitCraterow.FruitGarden является DBNull, который не может быть преобразован в строку (что происходит, когда вы звоните string.IsNullOrEmpty)

Итак ... Тест на DbNull

if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) && 
    !string.IsNullOrEmpty(fruitCraterow.FruitGarden)) 

проверить для DBNull см msdn

для оценки полей базы данных, чтобы определить, являются ли их значения DBNull, вы можете передать значение поля к DBNull.Value.Equals способ. Однако этот метод редко используется, потому что существует ряд других способов оценки поля базы данных для отсутствия данных. Эти включают в себя функцию Visual Basic IsDBNull, метод Convert.IsDBNull , метод DataTableReader.IsDBNull, метод IDataRecord.IsDBNull и несколько других методов.

Так

if (!Convert.IsDBNull(fruitCrateRow.FruitGarden) && 
    !string.IsNullOrEmpty(fruitCrateRow.FruitGarden) 

также должна быть тонкой.

EDIT

вы все еще можете добавить свой string.IsNullOrEmpty тест после испытания DBNull, как он будет оцениваться только тогда, когда левая часть истинна.

+0

, когда я пытаюсь использовать fruitCrateRow.FruitGarden! = DBNull.Value Я получаю ошибку \t Оператор '! =' Не может быть применен к операндам типа 'string' и 'System.DBNull – Mathematics

+0

@ user13814 вы правы , исправлено и отредактировано (но Claudio Redi уже исправил) –