Wednesday, May 9, 2012

C# Source Code for run mysql query(.sql) file

Source Code สำหรับการรัน ไฟล์ .sql ที่ใช้งานกับ MySQL
การรัน sql query file (.sql) เป็นฟังก์ชั่นที่เหมาะกับการติดตั้ง Database จาก Code ของโปรแกรม เพื่อให้ง่ายต่อการติดตั้งและลดขั้นตอนสำหรับลูกค้าที่ไม่มี ความรู้เรื่องการใช้งานโปรแกรมมากนัก
สำหรับตัวอย่างต่อไปนี้ผมได้แบ่ง Code ออกเป็น 2 ส่วนเพื่อแยกระหว่างการสร้าง Table และ Store Procedure script ใน MySQL
อันดับแรกอย่าลืม Import .sql file ไปยัง Project ของเราก่อนแล้วก็กำหนดที่ property ของไฟล์ให้เป็น Content ด้วย
ไปดูโค้ดตัวอย่างกันเลยครับ
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
Cursor.Current = Cursors.WaitCursor;
  connectionString = "server=" + textBox1.Text.Trim() + ";port=" + textBox5.Text.Trim()
      + ";user id=" + textBox2.Text + ";Password=" + textBox3.Text
      + ";Persist Security Info=True";
      //+ ";database=" + textBox4.Text;
  MySqlConnection conn = new MySqlConnection(connectionString);
      try
      {
          FileInfo file = new FileInfo(Application.StartupPath + "\\FullInstall.sql");
          string SQLscript = file.OpenText().ReadToEnd();
          SQLscript = SQLscript.Replace("davinci_db", textBox4.Text);
          SQLscript = SQLscript.Replace("localhost", textBox1.Text);
          SQLscript = SQLscript.Replace("root", textBox2.Text);
          //SQLscript = SQLscript.Replace("$$", "MySuperDelimiter");
 
          MySqlCommand sqlCommand = new MySqlCommand(SQLscript, conn);
          sqlCommand.CommandType = CommandType.Text;
          sqlCommand.Parameters.Add("@RestaurantName", MySqlDbType.VarChar).Value = textBox6.Text;
          conn.Open();
          sqlCommand.ExecuteNonQuery();
 
          var sql = new StringBuilder();
 
          //Start with this line..
          sql.AppendLine("/* Procedure structure for procedure `GetOpenOrders` */");
 
          sql.AppendLine("DROP PROCEDURE IF EXISTS  `GetOpenOrders`;");
 
          sql.AppendLine("DELIMITER $$");
 
          sql.AppendLine("CREATE PROCEDURE `GetOpenOrders`(RestuarantID int, TableID int)");
          sql.AppendLine("BEGIN");
          sql.AppendLine("SELECT     DocOrder_Tran_Temp.RestuarantID, DocOrder_Tran_Temp.DocID, DocOrder_Tran_Temp.TableID, DocOrder_Tran_Temp.ChairID, DocOrder_Tran_Temp.MenuID, ");
          sql.AppendLine("DocOrder_Tran_Temp.SubCode, DocOrder_Tran_Temp.Qty, menus.Name AS MenuName, foodtype.isdiscount, tables.Name AS TableName, ");
          sql.AppendLine("chairs.Name AS ChairName, menus.Price AS MenuPrice");
          sql.AppendLine("FROM       chairs RIGHT OUTER JOIN");
          sql.AppendLine("DocOrder_Tran_Temp ON chairs.ID = DocOrder_Tran_Temp.ChairID LEFT OUTER JOIN");
          sql.AppendLine("tables ON DocOrder_Tran_Temp.TableID = tables.ID LEFT OUTER JOIN");
          sql.AppendLine("foodtype INNER JOIN");
          sql.AppendLine("menus ON foodtype.ID = menus.FoodtypeID ON DocOrder_Tran_Temp.MenuID = menus.ID");
          sql.AppendLine("WHERE DocOrder_Tran_Temp.TableID = TableID AND DocOrder_Tran_Temp.RestuarantID = RestuarantID AND DocOrder_Tran_Temp.Status = 0 ORDER BY DocOrder_Tran_Temp.ChairID;");
          sql.AppendLine("END $$");
          sql.AppendLine("DELIMITER ;");
 
          sql.AppendLine("/* Procedure structure for procedure `InsertDocinv` */");
 
          sql.AppendLine("DROP PROCEDURE IF EXISTS  `InsertDocinv`;");
 
          sql.AppendLine("DELIMITER $$");
 
          sql.AppendLine("CREATE PROCEDURE `InsertDocinv`(RestaurantID int(10),Uid int(10), Discount double, total double, Sta int(10), billName char(10), ar_id int(10), out RESULT int)");
          sql.AppendLine("BEGIN");
 
          sql.AppendLine("Insert Into docinv_master(RestuarantID, Date, UserID, Discount, Total, Status, Name, AR_ID) values(RestaurantID, NOW(), Uid, Discount, total, Sta, billName, ar_id);");
          sql.AppendLine("SELECT LAST_INSERT_ID() INTO RESULT;");
          sql.AppendLine("END $$");
          sql.AppendLine("DELIMITER ;");
 
          sql.AppendLine("/* Procedure structure for procedure `InsertMenu` */");
 
          sql.AppendLine("DROP PROCEDURE IF EXISTS  `InsertMenu`;");
 
          sql.AppendLine("DELIMITER $$");
 
          sql.AppendLine("CREATE PROCEDURE `InsertMenu`(Code varchar(5), TypeID int(10), Price double, SubCode varchar(10), IsStock int, IsShow int, RestuarantID int, OUT RESULT int)");
          sql.AppendLine("BEGIN");
          sql.AppendLine("Insert Into menus(ID, FoodTypeID, Name, Price, SubCode, isstock, isshow, RestuarantID)");
          sql.AppendLine("Values(Code, TypeID, Name, Price, ExtFlag, IsStock, IsShow, RestuarantID);");
          sql.AppendLine("SELECT LAST_INSERT_ID() INTO RESULT;    ");
          sql.AppendLine("END $$");
          sql.AppendLine("DELIMITER ;");
 
          sql.AppendLine("/* Procedure structure for procedure `InsertOrderBillTran` */");
 
          sql.AppendLine("DROP PROCEDURE IF EXISTS  `InsertOrderBillTran`;");
 
          sql.AppendLine("DELIMITER $$");
 
          sql.AppendLine("CREATE PROCEDURE `InsertOrderBillTran`(RestuarantID int(10), UID int(10), TableID int(10), ChairID int(10), MenuID char(10), SubCode varchar(10), Qty int(10), Status char(10), Comment varchar(250),MenuAutoID int(10), OUT RESULT int)");
          sql.AppendLine("BEGIN");
 
          sql.AppendLine("Insert INTO DocOrder_Tran(RestuarantID,Date, UserID, TableID, ChairID, MenuID, SubCode, Qty, Status, Comment, MenuAutoID)");
          sql.AppendLine("Values(RestuarantID, NOW(), UID, TableID, ChairID, MenuID, SubCode, Qty, Status, Comment, MenuAutoID);");
          sql.AppendLine("SELECT LAST_INSERT_ID() INTO RESULT;");
 
          sql.AppendLine("Insert INTO DocOrder_Tran_Temp(DocID, RestuarantID, Date, UserID, TableID, ChairID, MenuID, SubCode, Qty, Status, Comment, MenuAutoID)");
          sql.AppendLine("Values(RESULT, RestuarantID, NOW(), UID, TableID, ChairID, MenuID, SubCode, Qty, Status, Comment, MenuAutoID);  ");
          sql.AppendLine("END $$");
          sql.AppendLine("DELIMITER ;");
 
          var script = new MySqlScript(conn, sql.ToString());
          script.Execute();
      }
      catch(MySqlException ex)
      {
          MessageBox.Show(ex.ToString(), "Connection", MessageBoxButtons.OK, MessageBoxIcon.Error);
      }
      finally
      {
          conn.Close();
          Cursor.Current = Cursors.Default;
      }
อย่างไรห็ลองประยุกต์ใช้งานดูนะครับ มีตัวอย่างต้นแบบดังนี้ครับ
1
2
3
4
5
6
7
8
9
string sql = "SELECT * FROM TestTable";
...
MySqlScript script = new MySqlScript(conn, sql);
...
MySqlScript script = new MySqlScript();
script.Query = sql;
script.Connection = conn;
...
script.Execute();


No comments:

Post a Comment