1.先載入參考(MySQL.Data)
專案中的參考(右鍵)=>加入參考=>"組件"中尋找MySQL.Data
2.建立ConnectString
private static MySqlConnectionStringBuilder MySQL => new MySqlConnectionStringBuilder
{
Server = "127.0.0.1", //MySQL的位置或URL(127.0.0.1為本地)
Port = 3306, //MySQL預設Port為3306
UserID = "Username", //MySQL的使用者帳號
Password = "Password", //MySQL的使用者密碼
Database = "mydb", //MySQL的DB名稱
CharacterSet = "utf8" //MySQL的字元集
};
3.讀取MySQL讀取DB內的table的所有資料至DataSet,
相關的資料操作請參考DataSet。
private static DataSet GetDataFromMySQL()
{
DataSet ds;
using (var conn = new MySqlConnection(MySQL.ConnectionString))
{
const string sql = @" SELECT * FROM `tableName`";
using (var adapter = new MySqlDataAdapter(sql, conn))
{
try
{
ds = new DataSet();
adapter.Fill(ds, "tableName");
}
catch
{
MessageBox.Show(@"Can not connect to database...", @"Message");
ds = null;
}
}
}
return ds;
}
4.更新MySQL
藉由MySqlDataAdapter會自動生成相關的command,如果需要更詳細的調整可自己寫SQL command。
MySqlDataAdapter會自動判斷並使用相關的command,
例如:有增加DataRow會使用InsertCommand
有減少DataRow會使用DeleteCommand
DataRow無增減,但row內容有改變時,會使用UpdateCommand
*註: 使用UpdateCommand時要特別注意不可改變DataRow的順序,
不然MySQL會報內部錯誤。
避免這問題最好是修改過一個DataRow就Update一次較為保險,
但遇到資料量大時效率會變差。
public static bool UpdateMySQL(DataTable table)
{
using (var conn = new MySqlConnection(MySQL.ConnectionString))
{
var sql = $@"SELECT * FROM `{table.TableName}`";
using (var adapter = new MySqlDataAdapter(sql, conn))
{
using (var cmd = new MySqlCommandBuilder(adapter))
{
adapter.InsertCommand = cmd.GetInsertCommand();//可省略會自動生成,
adapter.DeleteCommand = cmd.GetDeleteCommand();//也可自己下SQL指令。
adapter.UpdateCommand = cmd.GetUpdateCommand();
var updateNum = adapter.Update(table);
Console.WriteLine($@"更新{updateNum}個檔案");
return updateNum != 0;
}
}
}
}