MySQLとC#から返されたデータを処理する良い方法は何ですか?
-
22-07-2019 - |
質問
簡単な質問です。私が見つけたほとんどのブログとチュートリアルは、MySQLとC#の非常に基本的な要素に関するものです。
MySQL ADO Connectorを使用しています。
すべての設定が完了しており、テーブルからデータを取得できます。しかし、私は物事を単純化するメソッドを作成したいと思います。そのため、クエリ文字列(メソッドまたはオブジェクトのいずれか)を設定して関数を呼び出すと、何らかのデータオブジェクトが返されます。
// For each row
while(reader.Read())
{
// For each column
for(int i = 0; i < reader.FieldCount; i++)
{
Console.Write(reader.GetName(i).ToString());
Console.Write(reader.GetValue(i).ToString() + ",");
}
Console.Write("\n");
}
これは私が今持っているものです。たぶん、読者を返すことができるでしょう。しかし、データをループするたびに、whileループでforループが必要になります。
入力して返すことができるより良いデータオブジェクトがあるかどうか疑問に思いますか?これに関する資料を読むためのリンクも大好きです。
ところで、私はC#を学んでいるので、100%明確でないことがあるかもしれません。
解決
データリーダーを渡さないでください。データリーダーから読み取りを行っている間はデータベース接続を開いたままにしておく必要があるため、データベース接続をできるだけ早く閉じることができるように、必要なデータを何らかのコレクションに読み込む必要があります。
データを DataSet
または DataTable
に読み込むか、オブジェクトのクラスを作成して直接入力できます。例:
List<SomeCustomObject> data = new List<SomeCustomObject>();
while(reader.Read()) {
int id = reader.GetInt32(0);
string name = reader.GetString(1);
data.Add(new SomeCustomObject(id, name);
}
他のヒント
MySqlのADO.NETプロバイダーを使用して標準を返す理由 ADO.NET DataSet ?
これには、データを扱うコードを他のDBバックエンドに移植できるという利点があります。
所属していません StackOverflow