Oracle Data Provider for .NET (ODP.NET) でデータベースアクセス(パラメータ)

C#

[この記事は18年前に書かれました]

Oracle Data Provider for .NET (ODP.NET) を使用して、動的なパラメータのある データベースアクセスを行うにはOracleParameterクラスを使用します。 ODP.NETを使用する場合は、バインドするパラメータを名前で指定するか 位置で指定するかをBindByNameで指定します。 名前で指定するには、BindByNameをtrueにします。

using (OracleConnection con = new OracleConnection())
{
  con.ConnectionString = "User Id=scott; Password=tiger; Data Source=oracle";
  con.Open();

  try
  {
    // Commandオブジェクト生成
    using (OracleCommand cmd = con.CreateCommand())
    {
      // クエリ文字列
      cmd.CommandText = "select column1, column2 from test where column2 = :column2 and column1 = :column1";

      // バインド・メソッドを指定(名前指定パラメータ)
      cmd.BindByName = true;

      // パラメータの生成(プレイスホルダを名前で指定)
      OracleParameter para1 = new OracleParameter();
      para1.ParameterName = "column1";
      para1.Value = "103";
      cmd.Parameters.Add(para1);

      OracleParameter para2 = new OracleParameter();
      para2.ParameterName = "column2";
      para2.Value = "test";
      cmd.Parameters.Add(para2);

      // クエリの実行
      using (OracleDataReader reader = cmd.ExecuteReader())
      {
        while (reader.Read())
        {
          // カラム名
          Console.WriteLine(reader["column1"]);
          Console.WriteLine(reader["column2"]);
        }
      }
    }
  }
  finally
  {
    if (con != null)
    {
      con.Close();
    }
  }
}

位置で指定する場合は、クエリで指定したパラメータと、OracleParameterオブジェクト の追加順を同じにする必要があります。 この場合は、プレイスホルダと、OracleParameterの名前が一致している必要はありません。 ちなみに、こちらがデフォルトになっていてBindByNameを指定しなければ位置指定になります。

// クエリ文字列
cmd.CommandText = "select column1, column2 from test where column1 = :param and column2 = :param";

// パラメータの生成(プレイスホルダを順番で指定)
OracleParameter para1 = new OracleParameter();
para1.Value = "103";
cmd.Parameters.Add(para1);

OracleParameter para2 = new OracleParameter();
para2.Value = "test";
cmd.Parameters.Add(para2);

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

・関連記事
  Oracle Data Provider for .NET (ODP.NET) でデータベースアクセス
  汎用的なコードでデータベースアクセス(パラメータ)

コメント

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