C# ODBCでデータベースに接続してテーブルを更新する

ODBCで接続したデータベースに対して、INSERT・UPDATE・DELETEなど、テーブルを更新する方法を紹介します。

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


    <configuration>

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

    </configuration>

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

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

C# UpdateODBCDatabase メソッド

    /// <summary>
    /// ODBCデータベースのレコードを更新します。
    /// </summary>
    /// <param name=DBName>ODBC接続文字列DB名称</param>
    /// <param name=sqlList>SQL文リスト(INSERT/UPDATE/DELETE)</param>
    /// <returns>リターンコード(0:正常、9:異常)</returns>
    public static int UpdateODBCDatabase(string DBName, List<string> sqlList)
    {
        //App.config のconnectionStrings から接続文字列を取得する
        string cnstr = ConfigurationManager.ConnectionStrings[DBName].ConnectionString;

        // OdbcConnection クラスを使用
        using (OdbcConnection cn = new OdbcConnection(cnstr))
        {
            OdbcCommand command = new OdbcCommand();
            OdbcTransaction trans = null;

            command.Connection = cn;

            try
            {
                //DB接続オープン
                cn.Open();

                //トランザクションを開始
                trans = cn.BeginTransaction();

                //接続とトランザクション情報をセット
                command.Connection = cn;
                command.Transaction = trans;

                //List<String>型に格納しているSQLを foreach でループ
                sqlList.ForEach(delegate(String sqlstr)
                {
                    //SQLを設定し、クエリを実行
                    command.CommandText = sqlstr;
                    command.ExecuteNonQuery();
                });

                //トランザクションをコミット
                trans.Commit();

            }
            catch(Exception ex)
            {
                //エラーが発生した場合はロールバック
                trans.Rollback();
                return 9;
            }

        }

        return 0;

    }

引数

  • 引数に DBNamesqlList を指定します。
  • DBName は、さきほど App.config に指定した接続文字列の DBName を指定します。
  • sqlList は、List<string>型の変数で、INSERT文やUPDATE文などのSQLを指定します。

接続文字列の取得

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

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

DB接続オープン

    cn.Open();

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

トランザクションを開始

    trans = cn.BeginTransaction();

OdbcCommand.Connection.BeginTransaction() メソッドで、トランザクションを開始します。

SQL を実行

    //List<String>型に格納しているSQLを foreach でループ
    sqlList.ForEach(delegate(String sqlstr)
    {
        //SQLを設定し、クエリを実行
        command.CommandText = sqlstr;
        command.ExecuteNonQuery();
    });

List<string> 型の変数 sqlListForEachメソッドで1行ずつ取得します。

その後、OdbcCommand.CommandText にSQL文をセットします。

OdbcCommand.ExecuteNonQuery メソッドでSQL文を実行します。

トランザクションをコミット

    trans.Commit();

OdbcTransaction.Commit() メソッドでコミットを実行します。

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

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

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

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

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

コメント

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