C# 从数据库中检索可能为null的内容

C# 从数据库中检索可能为null的内容,c#,mysql,C#,Mysql,我的代码基本上是这样的: //get connection //make connection string which returns one value //open connection string picture = command.ExecuteScalar().ToString(); //close connection 存在查询返回null的可能性。那么,我如何找出它是否为null,然后将其存储到我的字符串中呢?我上面使用的方法不起作用,因为字符串抛出了一个异常。那么,我可以

我的代码基本上是这样的:

//get connection 
//make connection string which returns one value
//open connection
string picture = command.ExecuteScalar().ToString();
//close connection
存在查询返回null的可能性。那么,我如何找出它是否为null,然后将其存储到我的字符串中呢?我上面使用的方法不起作用,因为字符串抛出了一个异常。那么,我可以暂时将值存储到某个对象中,然后将其抛出到字符串中吗?我不想先运行两个ExecuteScalar来确定它是否为null,然后再存储它。

我通常这样做:

string picture = null;
object picTemp = command.ExecuteScalar();
if (picTemp != null && picTemp != System.DBNull.Value) {
   picture = (string)picTemp;
}

如果没有返回结果,
picTemp
将为
null
。如果返回了一个结果,但结果的值为null,则它将是
System.DBNull.Value

只需检查
null

string picture = command.ExecuteScalar() as string;
if(picture == null)
{
    // Handle the NULL case
}

// Do something with picture...
正如我从文档中看到的,您不必检查
System.DBNull.Value
,因为它不应该由
ExecuteScalar()
返回

返回值
类型:System.Object
中第一行的第一列 如果 结果集为空。返回最多2033个字符


From

数据库不应包含空值。请阅读表规范化。它不是表包含空值的原因,而是关系不存在的原因。@ChrisCooney:为什么数据库不应包含空值?NULL被设计用来表示“丢失的信息和不适用的信息”,在适用的地方使用它是绝对有意义的。@ChrisCooney是正确的人。对于一个可能向表中添加1个空值的关系,使用这么多不同的表似乎对查询很糟糕。它使编写复杂查询看起来像大约200行没有缩进的代码。非常感谢。我以前尝试过使用object,但我忘了在命令-\u-”上删除.ToString()。这可能是错误的,因为我是从内存中执行的,但“纯旧
null
”用于不返回结果的查询。示例:
从DUAL中选择*,其中1=2
。没有行,没有列
ExecuteScalar
返回
null
。另一方面,考虑<代码>从双< /代码>中选择NULL。这有一个结果集:一行一列,列值为null
ExecuteScalar
将在此处返回
System.DBNull.Value