数据库中(字符串)列的NULL
值是否会在C#中的数据集记录中返回null
值(默认情况下)?或者它会变成数据集中的空字符串吗?
答案 0 :(得分:6)
在.NET中,根据您使用的技术,NULL
值将返回null
或DBNull.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.
}
null
和DBNull.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
}
}