使用 .Net SqlClient 连接到 SQL Azure DB,是否可以获取架构中数据类型的 DBNull 对象?

Using .Net SqlClient to connect to SQL Azure DB, is it possible to get a DBNull object for the data type in schema?

我们正在 System.Data.SqlClient 下使用 类 连接到 Azure SQL 数据库。我们通过执行查询(或存储过程)然后对生成的 IDataReader 对象执行如下操作来处理数据类型。

var schema = reader.GetSchemaTable();
for (int i = 0; i < schema.Rows.Count; i++)
{
    Type type = (Type) schema.Rows[i]["DataType"];
    // do something for the type
}

此代码针对我们用户的数据库运行,其中一个出现以下错误:

System.InvalidCastException
Unable to cast object of type 'System.DBNull' to type 'System.Type'.

由于我们不容易访问用户的数据库服务器,因此我们很难重现此错误。我已经尝试了所有可用于在 SQL Azure 中创建 table 的数据类型,但它们都可以映射到 C# 中的某些 Type。所以现在我很困惑,对于SQL Azure 中的哪种数据库table,我会得到一个System.DBNull 的对象作为模式table 的数据类型吗?

有什么想法吗?谢谢。

我们已经找到问题所在。数据类型是地理(或几何),它们是 SQL CLR 类型,它需要安装某些程序集(通常与 SQL 服务器一起安装)以便您的代码获得它的 .NET 运行时类型。否则 DBNull 作为数据类型返回。