汎用的なコードでデータベースアクセス(パラメータ)

汎用的なコードで、動的なパラメータのあるデータベースアクセスを行うにはDbParameterクラスを使用します。 実行するクエリのパラメータ部にはプレイスホルダを指定しておきます。




このフォーマットは、汎用的なクラスであるDbParameterを使用しても以下のようにOracleとSQL Server で切り替える必要があります。

Oracleの場合「:パラメータ名」(コロンを指定)
SQL Serverの場合「@パラメータ名」(アットマークを指定)

using System.Configuration;
using System.Data.Common;
...

ConnectionStringSettings setting = System.Configuration.ConfigurationManager.ConnectionStrings["OracleTest"];
DbProviderFactory factory = DbProviderFactories.GetFactory(setting.ProviderName);

using (DbConnection con = factory.CreateConnection())
{
  con.ConnectionString = setting.ConnectionString;
  con.Open();

  try
  {
    using (DbCommand cmd = con.CreateCommand())
    {
      // クエリ文字列(プレイスホルダ指定)
      cmd.CommandText = "select column1, column2 from test where column1 = :column1 and column2 = :column2";

      // パラメータの生成
      DbParameter para1 = cmd.CreateParameter();
      para1.ParameterName = "column1";
      para1.Value = "103";
      cmd.Parameters.Add(para1);

      DbParameter para2= cmd.CreateParameter();
      para2.ParameterName = "column2";
      para2.Value = "test";
      cmd.Parameters.Add(para2);

      using (DbDataReader reader = cmd.ExecuteReader())
      {
        while (reader.Read())
        {
          Console.WriteLine(reader["column1"]);
          Console.WriteLine(reader["column2"]);
        }
      }
    }
  }
  finally
  {
    if (con != null)
    {
      con.Close();
    }
  }
}

出力:
103
test

パラメータの型は、設定された値から推測されますが、明示的に指定する場合は、DbParameter.DbTypeを指定します。

  (※).NET Framework version 2.0新機能

0 件のコメント :

コメントを投稿