我有一个数据库表
FruitCrateTable FruitCrateID, FruitCrateName, FruitGarden现在我还创建了一个存储过程,
CREATE procedure [dbo].[GetFruitCrate]
(
@FruitCrateID int,
@FruitCrateName varchar(222)
)
AS
SELECT
*
FROM
FruitCrateTable
WHERE
FruitCrateID = @FruitCrateID
and
FruitCrateName = @FruitCrateName 现在,当我试图检查FruitGarden是否为null或不使用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 '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时,我得到了错误运算符'!=‘不能应用于'string’和'System.DBNull‘类型的操作数。
发布于 2013-07-05 12:28:49
DBNull与null不一样。试着
if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) &&
fruitCrateRow.FruitGarden != "")发布于 2013-07-05 12:28:38
好吧,正如例外情况所述,fuitCraterow.FruitGarden是DBNull,它不能转换成字符串(当调用string.IsNullOrEmpty时发生)
所以..。DbNull测试
if (!DBNull.Value.Equals(fruitCrateRow.FruitGarden) &&
!string.IsNullOrEmpty(fruitCraterow.FruitGarden))要检查DbNull,请参阅msdn
若要计算数据库字段以确定其值是否为DBNull,可以将字段值传递给DBNull.Value.Equals方法。但是,这种方法很少使用,因为有许多其他方法来评估数据库字段是否丢失数据。这些方法包括Visual函数、Convert.IsDBNull方法、DataTableReader.IsDBNull方法、IDataRecord.IsDBNull方法和其他几种方法。
所以
if (!Convert.IsDBNull(fruitCrateRow.FruitGarden) &&
!string.IsNullOrEmpty(fruitCrateRow.FruitGarden)也应该没问题。
编辑
您仍然可以在string.IsNullOrEmpty测试之后添加DBNull测试,因为只有当左部分为true时才会对其进行评估。
发布于 2013-07-05 12:30:27
而不是string.isNullOrEmpty,您需要检查:
if (fruitCrateRow.FruitGarden != DbNull.Value)
{
//do something but i am getting error, how can i fix this issue ?因为它是数据库null。
请参阅:null和System.DBNull.Value有什么区别?
和:http://msdn.microsoft.com/en-us/library/system.dbnull.aspx
https://stackoverflow.com/questions/17488854
复制相似问题