C# ODBC 接続したテーブルのレコード件数を取得する

ODBC で接続したデータベースのテーブルに対して、レコード件数を取得するメソッドを照会します。 このメソッドは、Where文の指定も可能です。

App.config に ODBC 接続文字列を設定する

    <configuration>

      <connectionStrings>
        <add name="...DB名..."
             connectionString="...ODBC 接続文字列..." />
      </connectionStrings>

    </configuration>

<connectionStrings> で接続文字列を定義します。

<add> タグ の name でDB名を定義し、 connectionString で接続文字列を定義します。

C# GetODBCRecordCount メソッド

    /// <summary>
    /// ODBC経由でテーブルレコード件数を取得する
    /// </summary>
    /// <param name=DBName>ODBC接続文字列DB名称</param>
    /// <param name=SqlFrom>テーブル名</param>
    /// <param name=SqlWhere>Where文</param>
    /// <returns>テーブルレコード件数(異常時:0)</returns>
    public static int GetODBCRecordCount(string DBName, string SqlFrom, string SqlWhere)
    {

        int recordCount = 0;

        try
        {

            //App.config のconnectionStrings から接続文字列を取得する
            string cnstr = ConfigurationManager.ConnectionStrings[DBName].ConnectionString;

            //ODBCConnection オブジェクトを生成して、オープンする
            OdbcConnection cn = new OdbcConnection(cnstr);
            cn.Open();

            //レコード件数カウントSQLを組み立てる
            string sqlstr = ;
            sqlstr = sqlstr + "SELECT  COUNT(*)  AS  CNT  FROM   + SqlFrom";

            //引数に Where が設定されていれば、Where文を付与する
            if (SqlWhere != )
            {
                sqlstr = sqlstr + "  WHERE  " + SqlWhere;
            }

            // ODBCコマンドをセットする
            OdbcCommand oc = new OdbcCommand(sqlstr, cn);

            // ODBCクエリを実行する
            OdbcDataReader odr = oc.ExecuteReader();

            // レコードが読込める間ループする
            while (odr.Read() == true)
            {
                //レコード件数を取得し、Int32型に変換する
                recordCount = Convert.ToInt32(odr[CNT]);
            }

            //クローズする
            odr.Close();
            cn.Close();

        }
        catch(Exception ex)
        {
            throw;
        }

        return recordCount;
    }

引数

  • 引数に DBNmae, SqlFrom, SqlWhere を指定します。
  • DBName は、さきほど App.config に指定した接続文字列の DBName を指定します。
  • SqlFrom にテーブル名を指定します。 SQLのFROM文に相当します。
  • SqlWhere にWhere条件を指定します。SQLのWhere文に相当します。

件数カウントSQLの組み立て

このメソッドでは、以下のSQL文を組み立てます。

SELECT  COUNT(*)  AS  CNT  FROM  <SqlFrom:テーブル名>  WHERE  <SqlWhere:Where文>

接続文字列の取得

string cnstr = ConfigurationManager.ConnectionStrings[DBName].ConnectionString;

ConfigurationManager クラスを用いて、App.config に記入した接続文字列を取得します。

DB接続オープン

cn.Open();

OdbcCommand.Connection メソッドで接続をオープンします。

SQL文のセットと実行

    // ODBCコマンドをセットする
    OdbcCommand oc = new OdbcCommand(sqlstr, cn);

    // ODBCクエリを実行する
    OdbcDataReader odr = oc.ExecuteReader();

OdbcCommand に SQL文と接続情報(OdbcConnection)を指定します。

クエリの実行は、OdbcCOmmand.ExecuteReader()メソッドを使用し、OdbcDataReaderクラスにセットします。

レコードを取得する

    // レコードが読込める間ループする
    while (odr.Read() == true)
    {
        //レコード件数を取得し、Int32型に変換する
        recordCount = Convert.ToInt32(odr[CNT]);
    }

レコード件数が終端に達するまでループします。

取得したレコードから レコード件数 CNT の値を取得します。この項目は Double型ですので、Int32型に変換します。

クローズ処理

    odr.Close();
    cn.Close();

OdbcDataReaderOdbcConnection をクローズします。

レコード件数の返却

return recordCount;

最後に、レコード件数を返却して終了します。

おすすめ本 c#コードレシピ集

c#コードレシピ集は、「文字列を大文字あるいは小文字に変換したい」や「Taskをキャンセルしたい」など逆引き的にコードの書き方を調べられるレシピ集です。

2021年8月に発売された本で、全部で385個のレシピが収録されています。

ジャンルは日付処理やLINQ、並列処理と非同期処理など幅広く記載されています。

Kindle対応ですので、まずはサンプルをダウンロードして何が書かれているか確認してはいかがでしょうか。

コメント

タイトルとURLをコピーしました