private void SQLTransaction(MySqlConnection conn, MySqlCommand cmd, DBMailStruct mail) { using (MySqlTransaction trans = conn.BeginTransaction()) { try { cmd.Transaction = trans; cmd.ExecuteNonQuery(); trans.Commit(); mail.isSolve = true; if (mail.sendTo != null) { mail.sendTo(mail); } } catch (Exception e) { trans.Rollback(); if (mail.sendTo != null) { mail.isSolve = false; mail.sendTo(mail); } throw e; } } }
public void addNewCommand(DBMailStruct mail) { //if (!mail.command.StartsWith("select")) //{ // Utility.WriteDBCommandToLog.instance.writeACommand(mail.command); //} //直接處理 Task t1 = Task.Factory.StartNew(() => { DBManager.instance.makeCommand(mail); }); }
private void SQLAdapter(MySqlCommand cmd, DBMailStruct mail) { using (MySqlDataAdapter adapter = new MySqlDataAdapter(cmd)) { DataTable dataTable = new DataTable(); adapter.Fill(dataTable); mail.dataTable = dataTable; mail.isSolve = true; if (mail.sendTo != null) { mail.sendTo(mail); } } }
public void recycleMail(DBMailStruct mail) { lock (obj) { mail.init(); //確保沒有重複回收 if (!mailList.Contains(mail)) { mailList.Add(mail); } else { Console.WriteLine("maillist : it's already been recycle! "); } } //Console.WriteLine("maillist count : " + mailList.Count); }
public DBMailStruct getNewMail() { lock (obj) { DBMailStruct mail; if (mailList.Count > 0) { mail = mailList[0]; mailList.RemoveAt(0); } else { mail = new DBMailStruct(); } count++; mail.init(); //Console.WriteLine("mail manager get mail times : " + count); // Console.WriteLine("maillist count : " + mailList.Count); return(mail); } }
private void makeCommand(DBMailStruct mail) { try { using (MySqlConnection conn = new MySqlConnection(connectSetting())) { conn.Open(); //Console.WriteLine("MyDbConn : command = " + mail.command); using (MySqlCommand cmd = new MySqlCommand(mail.command, conn)) { if (mail.commandType == CommandType.select) { SQLAdapter(cmd, mail); } else { SQLTransaction(conn, cmd, mail); } } } } catch (Exception e) { //System.Diagnostics.Debug.WriteLine("SQL error = " + mail.command); //Utility.Logging.SqlErrorLog(mail.command, ex); System.Diagnostics.Debug.WriteLine(e.Message); //throw e; if (ExceptionHandler != null) { ExceptionHandler(e); } } finally { //使用完了就回收 DBMailManager.instance.recycleMail(mail); } }