如果结果中的给定列可以包含空值,是否有一种方法可以在.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 ..
答案 0 :(得分:1)
我有点困惑:
“对此不起作用,因为它返回基础列是否为空,这不是我想要的。”
“但似乎没有人告诉我它是否可以为空......”
您可以查询基础表以查看列是否为空(假设这是您想要的)。
SELECT IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'MyTable' AND COLUMN_NAME = 'MyColumn'
答案 1 :(得分:1)
不幸的是你不能,因为SQL服务器无法确定某个字段是否可以为空。您可以对结果集中的字段(运算符,函数调用等)进行仲裁转换,并且这些转换没有关于它们的元数据,无论它们是否可以返回null。所以你必须手动解决这个问题,或者使用带有schemabinding的视图......