2012年2月7日 星期二

C# : 對 MySQL 查詢資料


可以使用 MySqlCommand 的 ExecuteScalar() 直接查詢單筆資料的單一欄位結果值,也可以使用 MySqlCommand 的 ExecuteReader() 取得多筆資料並獲得欄位數、欄位名稱、資料型態等訊息。


查詢單筆資料的單一欄位值,如果查無資料,所得的結果為 null ...

EX: 查詢指定條件的單一欄位值

//開啟連線
MySqlConnection conn = new MySqlConnection("server=127.0.0.1;user=root;database=test;port=3306;password=1111;");
conn.Open();

//查詢 test_table 資料表中 id 欄位為 1 的 name 欄位值
string sql = "SELECT name FROM test_table WHERE id=1";
MySqlCommand cmd = new MySqlCommand(sql, conn);

//取得 name 欄位值
string _name = (string)cmd.ExecuteScalar();

EX: 查詢單一結果值

//開啟連線
MySqlConnection conn = new MySqlConnection("server=127.0.0.1;user=root;database=test;port=3306;password=1111;");
conn.Open();

//查詢 test_table 資料表的資料筆數
string sql = "SELECT COUNT(*) FROM test_table WHERE 1";
MySqlCommand cmd = new MySqlCommand(sql, conn);

//取得筆數值
int _count = (int)(long)cmd.ExecuteScalar();




查詢多筆且多欄位資料可透過 MySqlDataReader 的 HasRows、FieldCount、GetName()、GetDataTypeName() 取得是否查到資料的結果、欄位數、欄位名、欄位型態等資訊,另外透過 while 迴圈遍歷 Read() 可逐筆取出資料,不但可以序號做為索引,也可以欄位名稱做為索引取得資料:

EX:
//開啟連線
MySqlConnection conn = new MySqlConnection("server=127.0.0.1;user=root;database=test;port=3306;password=1111;");
conn.Open();

//查詢 test_table 資料表的全部資料
string sql = "SELECT * FROM test_table WHERE 1";
MySqlCommand cmd = new MySqlCommand(sql, conn);

MySqlDataReader data = cmd.ExecuteReader();

//如果有查到資料為 true 否則為 false
Console.WriteLine("是否查到資料:{0}", data.HasRows);

Console.WriteLine("欄位數:{0}", data.FieldCount);

//列出各欄位名稱及型態
for(int i = 0; i < data.FieldCount; i++){
Console.WriteLine("欄位 {0} 的名稱為 {1} ; 資料型態為 {2}", i, data.GetName(i), data.GetDataTypeName(i));
}

//列出查詢到的資料
while(data.Read()){

//以欄位名稱取得資料並列出
Console.WriteLine("id={0} , name={1}", data["id"], data["name"]);

//以欄位順序取得資料並列出
Console.WriteLine("id={0} , name={1}", data[0], data[1]);
}

data.Close();