2015-06-14 24 views
0

我想通過C#中插入一些值到MySQL數據庫C#如何通過SQL變量

INSERT INTO cliente (column1, column2) VALUES (value1, value2); 
set @ultima_pk = LAST_INSERT_ID(); 
INSERT INTO cliente_ref (refCol1, refCol2) VALUES (refvalue1, (SELECT @ultima_pk)); 
INSERT INTO cliente_ref (refCol1, refCol2) VALUES (refvalue1, (SELECT @ultima_pk)); 

當我測試它在MySQL只,很好地工作,但是當我嘗試通過C#,將其插入我不能。

錯誤消息:

Parameter '@ultima_pk' must be defined. 

但是@ultima_pk不是PARAM,是一個MySQL變量。

婁插入功能

public bool insert(string query) 
{ 
    this.conectar(); 

    cmd = new MySqlCommand(query, this.conexion); 

    cmd.ExecuteReader(); 
    //bool retornar = cmd.ExecuteNonQuery() >= 1 ? true : false; 
    bool retornar = true; 
    this.desconectar(); 

    return retornar; 
} 

的連接工作perfecfly。

任何建議如何在C#中查詢內部傳遞@ultima_pk?

+0

的'插入()'方法,這裏將迫使你編寫的代碼很容易受到sql注入攻擊的影響,因爲它缺少一種接受與查詢字符串分開的參數數據的機制。 –

+0

你推薦我的其他建議是什麼? – omixam

+0

看到我的答案如何做到這一點。 –

回答

0

你需要聲明它,然後你不需要選擇它:

DECLARE @ultima_pk int; 
INSERT INTO cliente (column1, column2) VALUES (value1, value2); 
set @ultima_pk = LAST_INSERT_ID(); 
INSERT INTO cliente_ref (refCol1, refCol2) VALUES (refvalue1, @ultima_pk); 
INSERT INTO cliente_ref (refCol1, refCol2) VALUES (refvalue1, @ultima_pk); 

這樣稱呼它:

public bool insert_cliente(string value1, string value2, string refvalue, string refvalue2) 
{ 
    string query = @" 
    DECLARE @ultima_pk int; 
    INSERT INTO cliente (column1, column2) VALUES (@value1, @value2); 
    set @ultima_pk = LAST_INSERT_ID(); 
    INSERT INTO cliente_ref (refCol1, refCol2) VALUES (@refvalue1, @ultima_pk); 
    INSERT INTO cliente_ref (refCol1, refCol2) VALUES (@refvalue2, @ultima_pk);"; 

    cmd = new MySqlCommand(query, this.conexion); 

    //I had to guess at parameter types/lengths. Use the actual column definitions from your database for this 
    cmd.Parameters.Add("@value1", MySqlDbType.VarChar, 50).Value = value1; 
    cmd.Parameters.Add("@value2", MySqlDbType.VarChar, 50).Value = value2; 
    cmd.Parameters.Add("@refvalue", MySqlDbType.VarChar, 50).Value = refvalue; 
    cmd.Parameters.Add("@refvalue2", MySqlDbType.VarChar, 50).Value = refvalue2; 

    try 
    { 
     this.conectar(); 
     return (cmd.ExecuteNonQuery() >= 1); 
    } 
    finally 
    { 
     this.desconectar(); 
    } 
} 
+0

對於mysql DECLARE @ultima_pk int;這是無效的。你只需要使用set @ ultima_pk = LAST_INSERT_ID();根據參考手冊。在我的帖子中顯示的sql代碼被用mysql(C#)測試並完美工作。這裏的問題是C#。 – omixam

+0

你說過,但錯誤信息告訴你'@ ultima_pk'變量沒有被定義。我們試着定義它。 –

+0

我證明了你的建議,但我得到了同樣的錯誤{「參數'@ultima_pk'必須被定義。」}。這對我來說沒有意義,在mysql中工作,但不是從C#中工作。 – omixam