2015-09-08 46 views
1

我們使用System.Data.SqlClient下的類連接到Azure SQL數據庫。我們通過執行查詢(或存儲過程)來處理數據類型,然後在生成的IDataReader對象上執行如下所示的一些操作。使用.Net SqlClient連接到SQL Azure DB,是否有可能爲schema中的數據類型獲取DBNull對象?

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的對象,用於模式表的數據類型?

任何想法?謝謝。

+0

我們嘗試了一些東西,但無法重現這一點。你還在看到這個問題嗎?你有它的repro嗎? –

+0

@JanEngelsberg是的,我們已經解決了問題,您可能會在下面看到我的答案。 – weidi

回答

0

我們發現了這個問題。數據類型是地理(或幾何),這些是SQL CLR類型,它需要安裝特定的程序集(通常與SQL Server一起安裝),以便代碼獲得它的.NET運行時類型。否則,DBNull將作爲數據類型返回。

相關問題