我有一个数据库表
FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden
现在我还创建了一个存储过程,
CREATE procedure [dbo].[GetFruitCrate]
(
@FruitCrateID int,
@FruitCrateName varchar(222)
)
AS
SELECT
*
FROM
FruitCrateTable
WHERE
FruitCrateID = @FruitCrateID
and
FruitCrateName = @FruitCrateName
现在,当我尝试使用DataAccess检查FruitGarden是否为null时,
我创建了row的实例,
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 'FruitGarden' in table 'GetFruitCrate' is DBNull.</message><full>System.Data.StrongTypingException: The value for column 'FruitGarden' in table 'GetFruitCrate' is DBNull. ---> System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'.
我将水果花园留空,因为它可以为空
更新
当我尝试fruitCrateRow.FruitGarden!= DBNull.Value我得到Error Operator'!='不能应用于'string'和'System.DBNull
类型的操作数答案 0 :(得分:6)
好吧,正如异常所述,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)
也应该没问题。
修改强>
您仍然可以在DBNull测试后添加string.IsNullOrEmpty
测试,因为仅当左侧部分为真时才会对其进行评估。
答案 1 :(得分:4)
DBNull
与null
不同。试试
if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) &&
fruitCrateRow.FruitGarden != "")
答案 2 :(得分:0)
而不是string.isNullOrEmpty
你需要检查:
if (fruitCrateRow.FruitGarden != DbNull.Value)
{
//do something but i am getting error, how can i fix this issue ?
因为它是一个数据库null。
请参阅: What is the difference between null and System.DBNull.Value?
和: http://msdn.microsoft.com/en-us/library/system.dbnull.aspx