使用.net SqlClient连接到SQL Azure数据库,是否有可能为模式中的数据类型获得DBNull对象?



我们使用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中创建一个表,但所有这些都能够映射到c#中的一些Type。所以现在我很困惑,什么样的数据库表在SQL Azure我会得到System.DBNull的对象模式表的数据类型?

任何想法?谢谢。

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

相关内容

  • 没有找到相关文章

最新更新