2015-06-14 21 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