SqlDataReader查明数据字段是否可为空

dan*_*dan 7 c# ado.net sql-server-2008

如果结果中的给定列可以包含空值,是否有一种方法可以在.NET中确定任何SQL Server结果集?

例如,如果我有这些陈述

Select NullableColumn From MyTable
Run Code Online (Sandbox Code Playgroud)

Select IsNull(NullableColumn, '5') as NotNullColumn From MyTable
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的datareader:

var cmd = new SqlCommand(statement, connection);
var rdr = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

我可以有这样的功能吗?

bool ColumnMayHaveNullData(SqlDataReader rdr, int ordinal)
{
   //????
}
Run Code Online (Sandbox Code Playgroud)

我希望它为第一个语句返回true,对第二个语句返回false.

rdr.GetSchemaTable()不适用于此,因为它返回基础列是否为空,这不是我想要的.datareader上有函数返回字段的底层sql类型,但似乎没有人告诉我它是否为null.

luc*_*uke 1

不幸的是你不能,因为 SQL Server 无法确定字段是否可为空。您可以对结果集中的字段(运算符、函数调用等)进行仲裁转换,并且这些转换没有关于它们的元数据,无论它们是否可以返回 null。所以你必须手动解决这个问题或者使用具有模式绑定的视图......