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

时间:2011-04-14 23:20:37

标签: c# sql-server-2008 ado.net

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

例如,如果我有陈述

Select NullableColumn From MyTable

Select IsNull(NullableColumn, '5') as NotNullColumn From MyTable

我得到一个像这样的datareader:

var cmd = new SqlCommand(statement, connection);
var rdr = cmd.ExecuteReader();
我可以拥有这样的功能吗?

bool ColumnMayHaveNullData(SqlDataReader rdr, int ordinal)
{
   //????
}

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

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

2 个答案:

答案 0 :(得分:1)

我有点困惑:

“对此不起作用,因为它返回基础列是否为空,这不是我想要的。”

“但似乎没有人告诉我它是否可以为空......”

您可以查询基础表以查看列是否为空(假设这是您想要的)。

SELECT IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'MyColumn'

答案 1 :(得分:1)

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