2014-05-06 50 views
1

在C#中工作,我遇到了函數的麻煩。函數運行查詢,查詢應該返回一個整數值,但我無法返回它。我不斷收到這樣的錯誤:OledbDataReader函數返回整數

  • 無法轉換類型oleDbDataReader的對象Int32類型
  • 指定的轉換是無效

不知道如何用C#和OleDbDataReader做到這一點。我的代碼如下

 public static int FifthQuery() 
    { 
     int _value = 0; 
     OleDbConnection _connectMe = Utilities.OledbConnect(); 

     OleDbCommand _query1 = new OleDbCommand(); 
     _query1.Connection = _connectMe; 
     _query1.CommandText = "SELECT count(*) FROM GIS.PERSONS where Name_Prefix = 'Dr.'"; 
     OleDbDataReader _reader = _query1.ExecuteReader(); 

     _reader.Read(); 

       //_value = Convert.ToInt32(_reader); 
       _value = _reader.GetInt32(0); 


     return _value; 
    } 
+0

你的確切問題是什麼? –

+0

試圖返回一個整數,但我不斷收到關於轉換的錯誤並輸入 – user1898629

+0

究竟是什麼錯誤?如果你想讓人們幫助你,告訴他們問題是什麼! –

回答

3

既然你使用COUNT(*),使用ExecuteScalar將是更好的辦法。

Executes the query, and returns the first column of the first row in the result set returned by the query.

int _value = (int)_query1.ExecuteScalar(); 

還可以使用using statement處置您的OleDbConnectionOleDbCommand

using(OleDbConnection _connectMe = Utilities.OledbConnect()) 
using(OleDbCommand _query1 = _connectMe.CreateCommand()) 
{ 
    _query1.CommandText = "SELECT count(*) FROM GIS.PERSONS where Name_Prefix = 'Dr.'"; 
    _connectMe.Open(); 
    int _value = (int)_query1.ExecuteScalar(); 
} 
+0

感謝您的帖子。我試過調整我的功能,但在線上: int _value =(int)_query1.ExecuteScalar(); 我不斷收到一個錯誤,指出指定的轉換無效。我不確定我是否錯過了一些圖書館或者爲什麼會發生這種情況。我還在第二個「使用」語句的最後一個括號之前放置了「返回_值」。不知道這是否也會造成任何問題。 – user1898629

+0

你確定你得到這個錯誤或'int _value =(int)_query1.ExecuteScalar();'line?我不這麼認爲,因爲因爲你的查詢返回COUNT(*)'在我看來它將是一個有效的整數。 –

+0

有某種類型的錯誤。我不記得那是什麼東西。但我確實最終將th類型更改爲對象而不是整數----> object _myObj = _query1.ExecuteScalar();然後我添加了另一條線來將對象轉換爲一個整數,這似乎工作得很好---> int _value = Convert.ToInt32(_myObj);不是最漂亮的方式,但它的工作原理。我仍然不確定在指定的演員無效之前可能會有什麼問題。我非常感謝您的反饋和關注。謝謝你的一切。 – user1898629