[この記事は19年前に書かれました]
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) でデータベースアクセス
汎用的なコードでデータベースアクセス(パラメータ)


コメント