2011-09-13 45 views
0

我已經設法使用wamp運行此查詢。如何通過單擊按鈕執行2個SQL語句

INSERT INTO guest (guestno,familyname) 
    VALUES(NULL,'Damn');  

INSERT INTO reservation (reservationno, guestno) 
    VALUES(NUll,LAST_INSERT_ID()) 

但是,如果我分別執行這2個插入語句,我將有一個外鍵約束。 我認爲他們都需要同時執行。

我的問題是:

  1. 如何納入我的C#的WinForm的代碼呢?
  2. 是否有可能在一個按鈕上有2個插入語句?

當用戶按下「添加保留」時,我想要執行兩個MySQl查詢。

這裏是我的插入語句:

private void button7_Click(object sender, EventArgs e) 
     { 
    string connectionString = 
      "Server=localhost;" + 
     "Database=sad;" + 
     "User ID=root;" + 
     "Password=root;" + 
     "Pooling=false"; 

     IDbConnection dbcon; 
     dbcon = new MySqlConnection(connectionString); 
     dbcon.Open(); 

     IDbCommand dbcmd = dbcon.CreateCommand(); 
     string sql = "<insert statement>"; 
     dbcmd.CommandText = sql; 
     IDataReader reader = dbcmd.ExecuteReader(); 
     reader.Read(); 

}

更新版本(不工作)

string connectionString = 
     "Server=localhost;" + 
     "Database=sad;" + 
    "User ID=root;" + 
    "Password=root;" + 
    "Pooling=false"; 
    Form3 f3 = new Form3(); 

     IDbConnection dbcon; 
     dbcon = new MySqlConnection(connectionString); 
     dbcon.Open(); 
     IDbCommand dbcmd = dbcon.CreateCommand(); 
     string sql = "insert into guest (guestno, familyname) values (null, '" + textBox6.Text + "'); insert into reservation (reservationno, guestno) values (null, LAST_INSERT_ID())"; 
     dbcmd.CommandText = sql; 

     IDataReader reader = dbcmd.ExecuteReader(); 
     reader.Read(); 
     MessageBox.Show("Added Guest Reservation Successfully"); 
     f3.guestList(); 
     f3.reservationList(); 

更新3號(仍然無法正常工作)

string connectionString = 
      "Server=localhost;" + 
      "Database=sad;" + 
      "User ID=root;" + 
      "Password=root;" + 
      "Pooling=false"; 

      IDbConnection dbcon; 
      dbcon = new MySqlConnection(connectionString); 
      dbcon.Open(); 
      IDbCommand dbcmd = dbcon.CreateCommand(); 
      dbcmd = new MySqlCommand("CreateGuestAndReservation", dbcon); 
      dbcmd.CommandType = CommandType.StoredProcedure; 
      dbcmd.Parameters.AddWithValue("familyName", "foo"); 
      dbcmd.ExecuteNonQuery(); 
enter code here 
+0

嘗試創建一個存儲過程,這將讓你只有一個執行調用MYSQL執行多個事情。 –

回答

1

您無法在給定的MySqlCommand上執行多個語句。

你最好的賭注各地(可維護性,性能,可讀性)是:

  • 您2條SQL語句創建一個MySQL的存儲過程。
  • 使用ExecuteNonQuery()調用您的存儲過程。
DELIMITER // 
CREATE PROCEDURE CreateGuestAndReservation 
(
    IN familyName VARCHAR(255) 
) 
BEGIN 
    insert into guest (guestno, familyname) 
    values (null, familyName); 

    insert into reservation (reservationno, guestno) 
    values (null, LAST_INSERT_ID()); 

END// 
DELIMITER ; 

從您的WinForms說它像這樣的代碼:

​​
+0

每當我嘗試創建過程時,我都會遇到語法錯誤。第10行附近的錯誤 –

+0

它仍然有錯誤先生。 .Addwithvalue和新的Mysql命令。我已更新我的帖子,以便您可以查看我已完成的操作 –

+0

@rj:查看我的更正 –

0

下面的代碼應該可以工作,但是我懷疑你可能已經試過了,因爲你在尋求幫助?

string sql = "INSERT INTO guest (guestno,familyname) VALUES(NULL,'Damn'); INSERT INTO reservation (reservationno, guestno) VALUES(NUll,LAST_INSERT_ID())"; 

如果您需要的參數,試試這個:

string sql = "INSERT INTO guest (guestno,familyname) VALUES(NULL,?familyName); INSERT INTO reservation (reservationno, guestno) VALUES(NUll,LAST_INSERT_ID())"; 
... 
dbcmd.Parameters.Add("@familyName", MySqlDbType.VarChar, 80).Value = _familyName; 

編輯:您可能需要運行2個INSERT命令。見here

+0

我編輯了我的代碼...但是,它仍然不起作用。 –

+0

你想讀什麼('reader.Read()'),爲什麼? –

+0

我會放什麼?我不知道如何執行我的查詢 –

0

我建議有一個辦法讓其他ID不是依靠自動ID生成,如MySQL和SQL Server的自動遞增,這是非常有限的。如果您使用HILO ID生成器,則首先獲取ID,然後在單個事務中執行幾次插入沒有任何問題,因爲您事先知道您的父ID。

它不會解決您的直接問題,但它將有助於您的應用程序在未來發展,特別是如果像數據一樣存儲父母孩子將經常發生。

0

試試這個,它會工作:

private void button56_Click(object sender, EventArgs e) { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("insert into stholidays values('" + dateTimePicker12.Text + "','" + dateTimePicker20.Text + "','" + dateTimePicker13.Text + "','" + mbk + "','" + dateTimePicker14.Text + "','" + dateTimePicker15.Text + "','" + lt + "','" + dateTimePicker16.Text + "','" + dateTimePicker17.Text + "','" + ebk + "','" + dateTimePicker18.Text + "','" + dateTimePicker19.Text + "','" + textBox105.Text + "','" + textBox106.Text + "','" + textBox107.Text + "','" + dd + "','" + textBox104.Text + "')", con); 
     SqlCommand cmd1 = new SqlCommand("insert into holidays values('" + dd + "','" + ms + "','" + day + "','" + textBox104.Text + "')", con); 
     cmd.ExecuteNonQuery(); 
     cmd1.ExecuteNonQuery(); 
     con.Close();  
    }