参数' @ myLeft'必须定义

时间:2014-03-23 21:54:04

标签: mysql

我的问题与已经回答的问题非常相似,但却没有。我想帮助整理一下。

我正在尝试将数据添加到数据库表中,但我保留了标题错误。这是我的MySQL代码:

Dim objCmdInsert As New MySqlCommand("LOCK TABLE threads WRITE;SET @myLeft := lft;SELECT @myLeft FROM threads WHERE threadid = '" & Request.QueryString("id") & "';UPDATE threads SET rgt = rgt + 2 WHERE rgt > @myLeft;UPDATE threads SET lft = lft + 2 WHERE lft > @myLeft;INSERT INTO threads(threadid, category, userid, ipaddress, section, subject, summary, body, tags, postedat, updatedat, rating, status, lft, rgt) VALUES(?threadid, ?category, ?userid, ?ipaddress, ?section, ?subject, ?summary, ?body, ?tags, ?postedat, ?updatedat, ?rating, ?status, @myLeft + 1, @myLeft + 2);UNLOCK TABLES;", objConn)

objCmdInsert.Parameters.Add("?threadid", MySqlDbType.VarChar, 36).Value = Guid.NewGuid.ToString()
objCmdInsert.Parameters.Add("?category", MySqlDbType.VarChar, 36).Value = "articlecomment"
objCmdInsert.Parameters.Add("?ipaddress", MySqlDbType.VarChar, 20).Value = HttpContext.Current.Request.ServerVariables("REMOTE_ADDR")
objCmdInsert.Parameters.Add("?section", MySqlDbType.VarChar, 36).Value = DBNull.Value
objCmdInsert.Parameters.Add("?userid", MySqlDbType.VarChar, 36).Value = GetStubs.GetUserGuid(HttpContext.Current.User.Identity.Name.ToString())
objCmdInsert.Parameters.Add("?subject", MySqlDbType.VarChar, 500).Value = DBNull.Value
objCmdInsert.Parameters.Add("?summary", MySqlDbType.Text).Value = DBNull.Value
objCmdInsert.Parameters.Add("?body", MySqlDbType.Text).Value = CommentBody.Text
objCmdInsert.Parameters.Add("?tags", MySqlDbType.VarChar, 500).Value = DBNull.Value
objCmdInsert.Parameters.Add("?postedat", MySqlDbType.DateTime).Value = DateTime.Now.ToString()
objCmdInsert.Parameters.Add("?updatedat", MySqlDbType.DateTime).Value = DateTime.Now.ToString()
objCmdInsert.Parameters.Add("?rating", MySqlDbType.Int32).Value = "0"
objCmdInsert.Parameters.Add("?status", MySqlDbType.VarChar, 200).Value = "Open"

我做错了什么?

4 个答案:

答案 0 :(得分:28)

通过在MySQL中搜索未定义的参数,我找到了解决这个问题的方法。本文(MySql.Data.MySqlClient.MySqlException: Parameter ‘@id’ must be defined)介绍了问题的基础知识。据我所知,它与连接器的升级有关。

您需要在连接字符串中添加Allow User Variables=True才能使用自定义变量。解决同样棘手的问题非常简单。 ;)

答案 1 :(得分:1)

错误非常丰富,您只是在查询中使用@myLeft参数而不定义它。您需要像其他人一样定义该参数。

objCmdInsert.Parameters.Add("?myLeft",...

答案 2 :(得分:0)

您可以尝试:

    [Test]
    public void ResetUsage_ValidateInPlayReset_ReturnsTrue()
    {
        CardSet testdeck = new CardSet();

        testdeck.ResetUsage();

        bool result = false;

        for (int i = 0; i < testdeck.cardArray.Length; i++)
        {
            if (testdeck.cardArray[i].Inplay == false)
            {
                result = true;
            }
        }

        Assert.That(result = true);
    }

您可能必须为每次出现该参数而这样做。

我不清楚objCmdInsert.Parameters.Add("@myLeft", MySqlDbType.Int).Value = 1212; 是什么意思(您正在尝试将列值分配给参数)

答案 3 :(得分:-3)

在使用@myLeft之前,您需要声明它。例如,假设@myLeft是INT:

DECLARE @myLeft INT;