C# で SQL Server のストアドプロシージャを実行するコード例の詳細解説
C# で SQL Server のストアドプロシージャを実行する方法
C# で SQL Server の ストアドプロシージャ を実行するには、以下のような手順を踏みます。
必要なライブラリの参照
- System.Data.SqlClient 名前空間を使用するために、プロジェクトに参照を追加します。
using System.Data.SqlClient;
接続情報の取得
- データベースへの接続情報を取得します。通常は、サーバー名、データベース名、ユーザー名、パスワードを使用します。
string connectionString = "Server=yourServerName;Database=yourDatabaseName;User ID=yourUsername;Password=yourPassword;";
接続の作成
SqlConnection
オブジェクトを使用して、データベースへの接続を作成します。
using (SqlConnection connection = new SqlConnection(connectionString))
{
// ...
}
ストアドプロシージャの呼び出し
SqlCommand
オブジェクトを使用して、ストアドプロシージャを呼び出します。
using (SqlCommand command = new SqlCommand("YourStoredProcedureName", connection))
{
command.CommandType = CommandType.StoredProcedu re;
// ストアドプロシージャのパラメータを設定する場合は、以下のようにします
command.Parameters.AddWithValue("@Parameter1", value1);
command.Parameters.AddWithValue("@Parameter2", value2);
// ストアドプロシージャを実行します
connection.Open();
command.ExecuteNonQuery();
}
接続のクローズ
using
ステートメントを使用することで、接続が自動的にクローズされます。
例:
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand("GetCustomers", connection))
{
command.CommandType = CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
wh ile (reader.Read())
{
// ストアドプロシージャの結果を処理します
Console.WriteLine(reader["CustomerID"] + " - " + reader["CustomerName"]);
}
}
}
コードの各部分の役割
using (SqlConnection connection = new SqlConnection(connectionString))
{
using (SqlCommand command = new SqlCommand("GetCustomers", connection))
{
command.CommandType = CommandType.StoredProcedure;
connection.Open();
SqlDataReader reader = command.ExecuteReader();
wh ile (reader.Read())
{
// ストアドプロシージャの結果を処理します
Console.WriteLine(reader["CustomerID"] + " - " + reader["CustomerName"]);
}
}
}
-
using ステートメント:
-
SqlConnection:
-
SqlCommand:
- SQL Server に対して実行するコマンドを表します。
CommandType.StoredProcedure
を設定することで、CommandText
プロパティに指定された文字列がストアドプロシージャの名前として扱われることを示します。
-
ExecuteReader:
- ストアドプロシージャを実行し、結果セットを返すためのメソッドです。
- 戻り値の
SqlDataReader
を使用して、結果セットを1行ずつ読み込むことができます。
-
while (reader.Read()):
-
Console.WriteLine:
さらに詳しく
- パラメータの渡し方:
- ストアドプロシージャにパラメータを渡す場合は、
SqlCommand.Parameters
コレクションにSqlParameter
オブジェクトを追加します。 AddWithValue
メソッドは、パラメータの名前と値を指定してSqlParameter
オブジェクトを作成し、コレクションに追加します。
- ストアドプロシージャにパラメータを渡す場合は、
command.Parameters.AddWithValue("@CustomerID", 123);
-
戻り値の扱い方:
-
エラー処理:
このコード例は、C# で SQL Server のストアドプロシージャを実行する基本的な手順を示しています。実際の開発では、エラー処理、トランザクション、パフォーマンスチューニングなど、より複雑な処理が必要になる場合があります。
追加で知りたいこと:
- 特定のストアドプロシージャの例
- パラメータの渡し方についてもっと詳しく
- エラー処理の方法
- 非同期処理
- ADO.NET の他の機能
C# でストアドプロシージャを実行する代替方法
C# で SQL Server のストアドプロシージャを実行する方法は、これまでにご紹介した System.Data.SqlClient
名前空間を使用する方法以外にも、いくつかの選択肢があります。それぞれの特徴やメリット・デメリットを踏まえ、最適な方法を選択することができます。
Entity Framework を利用する方法
- ORM(オブジェクト関係マッピング) ツールである Entity Framework を利用することで、SQL クエリを直接記述せずに、オブジェクト指向の概念でデータベース操作を行うことができます。
- LINQ to Entities を使用して、ストアドプロシージャをメソッドのように呼び出すことができます。
- コードの可読性が高くなり、データベースとのやり取りを抽象化できるというメリットがあります。
using (var context = new MyDbContext())
{
var result = context.Database.SqlQuery<YourResultType>("EXEC YourStoredProcedureName @Parameter1 = @p1",
new SqlParameter("@p1", value1))
.ToList();
}
Dapper を利用する方法
- マイクロORM ツールである Dapper は、シンプルなAPIで高性能なデータアクセスを実現します。
- 動的な SQL を実行したり、ストアドプロシージャを呼び出したりすることができます。
- Entity Framework よりも軽量で、パフォーマンスを重視する場合に適しています。
using Dapper;
using (var connection = new SqlConnection(connectionString))
{
var result = connection.Query<YourResultType>("EXEC YourStoredProcedureName @Parameter1 = @p1",
new { Parameter1 = value1 });
}
ADO.NET の他のクラスを利用する方法
System.Data.SqlClient
名前空間には、SqlDataAdapter
やDataSet
などのクラスが提供されており、より複雑なデータアクセスシナリオに対応できます。SqlDataAdapter
を使用して、ストアドプロシージャの結果をDataSet
に読み込むことができます。
サードパーティのORMツール を利用する方法
- Entity Framework や Dapper 以外にも、NHibernate、FluentData などのサードパーティのORMツールがあります。
- 各ツールには独自の機能や特徴があり、プロジェクトの要件に合わせて選択することができます。
各方法の比較
方法 | 特徴 | メリット | デメリット |
---|---|---|---|
System.Data.SqlClient | 基本的なADO.NETクラス | シンプル、柔軟性が高い | 手書きのSQLが必要、コーディング量が多い |
Entity Framework | ORM | コードの可読性が高い、抽象化 | 学習コストが高い、オーバーヘッドが大きい |
Dapper | マイクロORM | 高性能、シンプル | 機能が限定的 |
サードパーティのORM | 多様な機能 | プロジェクトに合わせた選択が可能 | 学習コスト、ライセンスなど |
どの方法を選択するかは、プロジェクトの規模、パフォーマンス要件、開発者のスキルなど、様々な要因によって異なります。
- シンプルなデータアクセス:
System.Data.SqlClient
- オブジェクト指向なデータアクセス: Entity Framework
- 高性能なデータアクセス: Dapper
- 複雑なデータアクセスシナリオ: ADO.NETの他のクラスやサードパーティのORM
これらの選択肢を比較検討し、最適な方法を選択してください。
- 非同期処理:
async/await
キーワードを使用することで、非同期にストアドプロシージャを実行することができます。 - トランザクション:
SqlConnection
クラスのBeginTransaction
メソッドを使用して、トランザクションを開始できます。 - 接続プーリング:
SqlConnectionStringBuilder
クラスを使用して、接続プーリングを設定することで、接続の確立にかかる時間を短縮できます。
ご希望に応じて、より具体的なコード例や、特定のシナリオに合わせた解説も可能です。
どのような点に関心がおありですか?
- 特定のORMツールについて詳しく知りたい
- パフォーマンス比較について知りたい
- 非同期処理やトランザクションについて詳しく知りたい
c# sql-server stored-procedures