2011-12-16 28 views
2

我正在查詢使用OleDb的Oracle 10g數據庫。爲什麼OleDb ExecuteScalar方法在查詢COUNT時返回Decimal?

我的查詢非常簡單,只是從給定的表中獲得COUNT條記錄。

在使用ExecuteScalar時,我遇到了嘗試將結果值轉換爲Int的轉換錯誤。在檢查類型時,它變成了System.Decimal。

現在,我已經看到其他用戶與ID有類似的問題,但在這種情況下,我只是返回一個預計爲整數的計數,那麼爲什麼我仍然必須施放它?

SQL如下。

_sqlText = @" select count(*) as num_records from ce_quote_ext 
     where ce_quoteid in (select ce_quoteid from ce_quote where opportunityid in 
     (select opportunityid from ce_quote where ce_quoteid = '?')) and custsign = 'T' "; 
+0

查看所使用的oracle驅動程序規範。它可以爲數字和其他類型指定超類型以實現緊湊。 – 2011-12-16 19:39:38

回答

3

這真的是Oracle OleDb庫返回小數。這是正確的行爲。有關Oracle文檔,請參見here。在Oracle文檔中的示例中,他們將COUNT()函數的返回值轉換爲小數點。所以,它通過設計出現。

// C# 
... 
CmdObj.CommandText = "select count(*) from emp"; 
decimal count = (decimal) CmdObj.ExecuteScalar(); 
... 
+0

這是什麼讓我絆倒。 ExecuteScalar的MSDN文檔顯示瞭解包到Int32的返回值。沒有具體提及供應商,它對退貨類型有潛在影響。 http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.executescalar(v=VS.71).aspx 話雖這麼說,我的供應商是一個自定義OLEDB數據提供程序。沒有跡象表明我正在使用Oracle數據庫,並且沒有使用Oracle .NET程序集。所以,當Oracle文檔以一種方式描述時,我期望另一種方式。思考? – 2011-12-19 14:16:33