這種錯誤是筆者在執行一條計算符合條件的行有多少個,用OracleDataReader讀取計算出的行數時發生。
查詢語句為:
1
<code>Select</code> <code>Count</code><code>(1) </code><code>FROM</code> <code>HP_TS </code><code>Where</code> <code>TS_ID>0</code>
C#執行過程為:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<code>public</code> <code>static</code> <code>int</code> <code>GetSingle(</code><code>string</code> <code>strSQL)</code>
<code> </code><code>{</code>
<code> </code><code>try</code>
<code> </code><code>{</code>
<code> </code><code>OpenConnection();</code>
<code> </code><code>OracleDataReader oraDataReader = ExecuteReader(Connection, CommandType.Text, strSQL, </code><code>null</code><code>);</code>
<code> </code><code>int</code> <code>count = -1;<br data-filtered=</code><code>"filtered"</code><code>></code>
<code> </code><code>if</code> <code>(oraDataReader.HasRows == </code><code>true</code> <code>&& oraDataReader.Read())</code>
<code> </code><code>{</code>
<code> </code><code>count = oraDataReader.GetInt32(0); </code><code>// ① 此處抛出該錯誤異常</code>
<code> </code><code>}<br data-filtered=</code><code>"filtered"</code><code>></code>
<code> </code><code>oraDataReader.Close();</code>
<code> </code><code>return</code> <code>count;</code>
<code> </code><code>}</code>
<code> </code><code>catch</code> <code>(System.Exception ex)</code>
<code> </code><code>throw</code> <code>ex;</code>
<code> </code><code>}</code>
後來經過調試發現是由于oraDataReader[0] (或者是oraDataReader["Count(1)"]),的類型是decimal的,是以直接用以上代碼①處的結果,将發生本文所述的異常。
後來,給出如下解決方法:
将①處替換為下面所示代碼
<code>count = Convert.ToInt32(oraDataReader[0].ToString());</code>
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。
本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/5822668.html,如需轉載請自行聯系原作者