2016-03-07 55 views
-3

我有這樣的情況下連接:無法打開使用「使用VAR參數化查詢」

我有一個名爲「入住日期」一個叫「Saidas」表。兩者都有 列「數據」和「霍拉」。考慮到這一點,因爲「entradas」的「數據」和「hora」欄表示在該日期和時間加入的汽車,並且「saidas」 的列「data」和「hora」的值是意思是插入,因爲我點擊一個按鈕,插入當前日期和時間 我正在請求一個sql語法,可以將 值「data」和「hora」插入表「saidas」並更新值爲 「入住日期」被稱爲「西」,這是等於0,我希望它變成 1按下按鈕

,我有這個程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `entradas_sai`(
IN ID_VEICULO VARCHAR(45), OUT retcode INT) 
BEGIN 
    DECLARE _rollback BOOL DEFAULT 0; 
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET _rollback = 1; 
    START TRANSACTION; 
    INSERT INTO SAIDAS(data, hora) VALUES(date(now()) ,time(now())); 
    UPDATE ENTRADAS SET SAI=1; 
    IF '_rollback' THEN 
     SET retcode = 0; 
     ROLLBACK; 
    ELSE 
     SET retcode = 1; 
     COMMIT; 
    END IF; 
END 

這是我實際的代碼來對按鈕點擊運行它:

private void cmdSaida_Click(object sender, EventArgs e) 
     { 

      using (var cn = new MySqlConnection("server=localhost;user id=root;password=12345;persistsecurityinfo=True;database=portaria;allowuservariables=True")) 
      { 
       cn.Open(); 

        MySqlCommand cmd = new MySqlCommand(); 
        cmd.CommandText = "entradas_sai"; 
        cmd.CommandType = CommandType.StoredProcedure; 

        cmd.Parameters.AddWithValue("@ID_veiculo", Grid1.SelectedCells[1].Selected); 
        cmd.Parameters["@id_veiculo"].Direction = ParameterDirection.Input; 

        cmd.Parameters.AddWithValue("@retcode", MySqlDbType.Int32); 
        cmd.Parameters["@retcode"].Direction = ParameterDirection.Output; 

        cmd.ExecuteNonQuery(); 
        var res = cmd.Parameters["@retcode"].Value; 

       cn.Close(); 
      }    
     } 

而我此刻的問題是,當我按一下按鈕,它不執行我的程序既不是我的命令來打開或關閉連接。任何消化?

編輯:經過一番研究,我發現,我的實際過程將所有的值從0到1列「西」我怎麼能做到這一點,因此只能更改選定的網格行值的基礎上,「ID_Entrada」

+0

你得到任何錯誤/異常消息? – Izzy

+0

當你追蹤它時會發生什麼? – BugFinder

+0

唯一的事情,視覺工作室告訴我,它的連接必須在執行任何SQL功能之前運行...但我打開它,因爲它去了,並在斷點調試,它傳遞到該點上的cn.Open( );並關閉字符串,禁用所有的代碼... –

回答

0

您有一個MySqlCommand對象,但它不與任何連接關聯。必須有一個活動連接才能執行命令。

您可以在構造其關聯:

MySqlCommand cmd = new MySqlCommand("entradas_sai", cn); 

或構造之後:

cmd.Connection = cn;