DB中的NULL值是否会在数据集中返回空值?

时间:2013-11-22 23:07:17

标签: c# asp.net sql-server null

数据库中(字符串)列的NULL值是否会在C#中的数据集记录中返回null值(默认情况下)?或者它会变成数据集中的空字符串吗?

2 个答案:

答案 0 :(得分:6)

在.NET中,根据您使用的技术,NULL值将返回nullDBNull.Value

使用ADO.NET(System.Data)时,数据库NULL值通常会返回为DbNull.Value,而在(例如)Entity Framework中,它将返回为{{1 }}

如果您没有进行任何其他处理,则该值不会作为空字符串返回,并且在任何情况下都不会返回字符串值“null”。

答案 1 :(得分:3)

通常它会返回值DBNull.Value或抛出InvalidCastException。根据你的目的,它可以将DBNull.Value转换为null,但通常当这样的事情发生时,它确实正在对你进行DBNull.Value检查并隐藏它。制作你自己的扩展方法并不难做到。

public static string GetStringWithNullCheck(this IDataReader reader, int index)
{
    if(reader.IsDBNull(index))
        return null;
    return reader.GetString(index); //If we called this on a record that is null we get a InvalidCastException.
}

nullDBNull.Value之间的这种区别在调用ExecuteScalar()时最有用,这可以让您告诉"没有记录返回"之间的差异。并且"记录已返回但数据库包含NULL作为值"

using(var cmd = new SqlCommand(query, connection))
{
    var result = cmd.ExecuteScalar();

    if(result == null)
    {
        //0 rows where returned from the query
    }
    else if(result == DBNull.Value)
    {
        //Rows where returned but the value in the first column in the first row was NULL
    }
    else
    {
        //Result is the value of whatever object was in the first column in the first row
    }
}