[この記事は17年前に書かれました]
汎用的なコードで、動的なパラメータのあるデータベースアクセスを行うには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新機能
コメント