.NET の PrepareCommand の使用方法
.NET では、データベースコマンドをクエリーや更新処理で実行するために、PrepareCommand メソッドを使用します。
PrepareCommand メソッドの主な目的は、データベース アクセスのパフォーマンスを最適化することです。PrepareCommand メソッドを使用するまで、データベース コマンドを実行するたびに、ADO.NET はコマンド テキストをデータベース サーバーに送信して解析し、コンパイルします。これにより、同じコマンドを繰り返し実行する場合、解析およびコンパイル プロセスが繰り返され、パフォーマンスが低下します。
PrepareCommandメソッドを利用することで、コマンドを初めて実行するときにコマンドテキストをデータベースサーバに送信してパースやコンパイルを実施し、そのコンパイル済みの結果をキャッシュしておくことができます。それにより、以降同じコマンドを実行する際には、パースやコンパイル処理を再実施することなく、すでにコンパイル済みのコマンドをそのまま利用できるため、パフォーマンスが向上します。
PrepareCommandメソッドを使用する手順は次のとおりです。
- データベース接続オブジェクトとコマンドオブジェクトを作成し、接続文字列とコマンドテキストを設定する。
- Prepareメソッドを呼び出し、コマンドテキストをデータベースサーバに送信して構文解析とコンパイルを行います。
- コマンドパラメータの値を設定します。
- コマンドを実行する。
PrepareCommandメソッドを使用する例を以下に示します:
using System;
using System.Data.SqlClient;
public class Program
{
private static string connectionString = "Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=password";
public static void Main()
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
string commandText = "SELECT * FROM Customers WHERE Country = @country";
using (SqlCommand command = new SqlCommand(commandText, connection))
{
command.Parameters.AddWithValue("@country", "USA");
command.Prepare();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader["CustomerID"] + " - " + reader["CompanyName"]);
}
}
}
}
}
}
上の例では SqlConnectionオブジェクトと SqlCommandオブジェクトを最初に作成し、接続文字列とコマンドテキストをそれぞれ設定している。その後、Prepareメソッドを呼び出してコマンドテキストをデータベースサーバーに送信し、解析とコンパイルが行われる。次に、AddWithValueメソッドを呼び出してコマンドパラメータの値を設定し、最後にコマンドを実行している。