2021年4月28日 星期三

[C#] 連接到MySQL

 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;
    }
   }
  }
 }