使用 .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 作为数据类型返回。
我们正在 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 作为数据类型返回。