StackOverflow サイトのリンク (以下の参照) に基づいて、C# アプリケーションから MySQL データベースへのクエリを実行するためのこのコード ブロックを考え出しました。
using (var dbConn = new MySqlConnection(config.DatabaseConnection))
{
using (var cmd = dbConn.CreateCommand())
{
dbConn.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT version() as Version";
using (IDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
Console.WriteLine("Database Version: " + reader.GetString(reader.GetOrdinal("Version")));
}
}
}
}
これに関する問題は、作成するクエリのグループがあるたびに、この大量のコード ブロックを作成する必要があることです。これは、アプリケーションの存続期間中、接続を開いたままにしない (およびすべきではない) ためです。 .
using
サポート構造 (ネストされたs、接続を開くなど) を構築し、代わりに接続文字列と実行したいクエリを渡して結果を取得するより効率的な方法はありますか?
参照された質問:
- C# および MySql との接続の使用- 具体的には tsells による回答
- Mysql select where と C#
- C# を使用して mysql テーブルを更新する
私が見たのはそのうちの3つです。他にもいくつかありましたが、私の Google-fu は現在それらを再検索できません。これらはすべて、単一のクエリを実行する方法に対する答えを提供します。個別のビジネス ロジック クエリを実行したい (そのうちのいくつかは繰り返し)、不要なコードを繰り返したくありません。
私が試したこと: nawfal からのコメントに基づいて、次の 2 つの方法があります。
private MySqlDataReader RunSqlQuery(string query)
{
Dictionary<string, string> queryParms = new Dictionary<string, string>();
MySqlDataReader QueryResult = RunSqlQuery(query, queryParms);
return QueryResult;
}
private MySqlDataReader RunSqlQuery(string query, Dictionary<string, string> queryParms)
{
MySqlDataReader reader = null;
if (queryParms.Count > 0)
{
// Assign parameters
}
try
{
using (var dbConn = new MySqlConnection(config.DatabaseConnection))
{
using (var cmd = dbConn.CreateCommand())
{
dbConn.Open();
cmd.CommandType = CommandType.Text;
cmd.CommandText = query;
using (reader = cmd.ExecuteReader())
{
return reader;
}
}
}
}
catch (MySqlException ex)
{
// Oops.
}
return reader;
}
この試行の問題はreader
、メソッドから返されたときに が閉じることです。