sampleテーブルに登録されたデータを取得します。
次に取得したデータから値を取り出し、コンソール出力するサンプルです。
①方法1:MySqlDataReader を使用して値を取得する方法
レコードを順次取り出す方法です。
レコードを読んでいる間はデータベースとの接続を閉じることが出来ません。
・データベースとのやり取りがレコード事に発生する。
・方法2に比べるとメモリの消費は低いかも?
②方法2:MySqlDataAdapter を使用して値を取得する方法
レコードを全件取得してから処理を行う方法です。
取得後、データベースとの接続を切断してから処理を行えます。
・データベースとのやり取りが1回ですむ。
・方法1に比べるとメモリの消費は高いかも?
プログラミング
言語:C#
using MySql.Data.MySqlClient;
/// <summary>
/// button1クリック時処理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
// 動物リスト
List<string> animalList = new List<string>() { "犬", "猫", "鳥", "猿" };
// MySQLへの接続情報
string server = "localhost";
string database = "test_schema";
string user = "root";
string pass = "Develop_000";
string charset = "utf8";
string connectionString = string.Format("Server={0};Database={1};Uid={2};Pwd={3};Charset={4}", server, database, user, pass, charset);
// 接続先データベースを指定する
MySqlConnection con = new MySqlConnection(connectionString);
DataTable dt = new DataTable();
try
{
// データベースと接続する
con.Open();
// SQLコマンドを宣言する
MySqlCommand cmd = con.CreateCommand();
// テーブルを作成する
cmd.CommandText = " CREATE TABLE IF NOT EXISTS sample " +
" (no INT NOT NULL, title VARCHAR(45),PRIMARY KEY(no))";
cmd.ExecuteNonQuery();
// データを全て削除する
cmd.CommandText = "DELETE FROM sample ";
cmd.ExecuteNonQuery();
// 動物リストを追加する
cmd.ExecuteNonQuery();
for (int i = 0; i < animalList.Count; i++)
{
// データを挿入する
cmd.CommandText = $" INSERT INTO sample VALUES ({i},'{animalList[i]}')";
cmd.ExecuteNonQuery();
}
Console.WriteLine("■ 方法1:MySqlDataReader を使用して値を取得する方法");
cmd.CommandText = $" SELECT * FROM sample ";
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read() == true)
{
int no = int.Parse(reader["no"].ToString());
string title = reader["title"].ToString();
Console.WriteLine((String.Format($"no:{no} title:{title}")));
}
reader.Close();
Console.WriteLine("■ 方法2:MySqlDataAdapter を使用して値を取得する方法");
// データを全件取得する
MySqlDataAdapter adapter = new MySqlDataAdapter("SELECT * FROM sample", con);
// adapterからdtにデータを読み込む
adapter.Fill(dt);
}
finally
{
// データベースを切断する
con.Close();
}
// 上記で取得したdtから値を取得する
foreach (DataRow dr in dt.Rows)
{
int no = int.Parse(dr["no"].ToString());
string title = dr["title"].ToString();
Console.WriteLine((String.Format($"no:{no} title:{title}")));
}
}
実行結果
方法1、方法2のどちらも同じ結果が出力されます。