1

C# で作業していて、関数に問題があります。関数はクエリを実行し、クエリは 1 つの整数値を返すはずですが、それを返すのに問題があります。次のようなエラーが発生し続けます。

  • 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;
     }
4

1 に答える 1

3

を使用しているのでCOUNT(*)、使用ExecuteScalarする方がより良いアプローチになります。

クエリを実行し、クエリによって返された結果セットの最初の行の最初の列を返します。

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

また、usingステートメントOleDbConnectionを使用してandを破棄しますOleDbCommand

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();
}
于 2014-05-06T19:13:13.883 に答える