C# 如何传递sql变量

标签 c# mysql sql tsql sqlcommand

我正在尝试通过 C# 向 mysql 数据库插入一些值

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;
}

连接工作正常。

任何建议如何在 C# 中的查询内部传递 @ultima_pk?

最佳答案

你需要声明它,然后你不需要选择它:

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();
    } 
}

关于C# 如何传递sql变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30834409/

相关文章:

php - 选择数据库结构中的表

php - SELECT查询, ""为空时WHERE全选

c# - mvc6中app、服务和中间件的区别

c# - 使用 razor if 语句时出现 NullReferenceException

c# - 为什么没有处置契约(Contract)?

python - 如何使用python传递两个或多个列表并将其存储到mysql数据库

mysql - 从 "show tables"MySQL 查询中选择数据

sql - 将varchar2的oracle标准数据类型从BYTE设置为CHAR

sql - 如何在替代条件(2 个中的 1 个)条件下加入表

c# - 打开网站错误