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() メソッドでコミットを実行します。


\ シ ェ ア お ね が い し ま す ! ! /

目次