【问题标题】:Parameter not passed from program to stored procedure参数未从程序传递到存储过程
【发布时间】:2017-08-12 17:23:36
【问题描述】:

我在 C# 页面中传递参数,

conn.Open();
MySqlCommand cmd = new MySqlCommand(sql, conn);  
cmd.CommandText = commandtype.storedprocedure;   
cmd.Parameters.AddWithValue("?user", user)
cmd.Parameters.AddWithValue("?name", name);

关于mysql存储过程中使用的2个参数用于记录是否存在查找

@id integer,
@name varchar(200)

BEGIN
    IF EXISTS (SELECT * FROM usertable WHERE  id = @id and mode =0 limit 1 )
    THEN
        UPDATE usertable  SET name = name where id=@id and mode = 0;
    ELSE
    INSERT INTO usertable  (name,  mode)VALUES (@name`enter code here`,0);
    END IF;
END

【问题讨论】:

  • cmd.CommantText = commandtype.storedprocedure 没有太大意义。应该是cmd.CommandType = commandtype.storedprocedure

标签: c# mysql stored-procedures parameter-passing


【解决方案1】:

另一种将变量发送到存储过程的方法,我用过没有问题:

cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@name", SqlDbTpye.Varchar).Value = name;

我认为您可以像这样按大小和类型指定变量:

SqlDbTpye.Varchar,200

但现在无法测试。

【讨论】:

    【解决方案2】:

    您需要确保参数的前缀匹配。如果在存储过程中使用“@”,那么在 C# 中也需要使用“@”,而不是“?”。

    cmd.CommandType = CommandType.StoredProcedure;   
    cmd.Parameters.AddWithValue("@user", user)
    cmd.Parameters.AddWithValue("@name", name);
    

    【讨论】:

    • 您好,我找到了,需要使用吗?符号而不是@,它的工作,感谢您的支持,我将程序更正为,
    猜你喜欢
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多