我准备好的陈述有什么问题?

时间:2021-02-17 08:34:47

标签: mysql sql vb.net syntax-error prepared-statement

在使用准备好的语句时,我的 SQL 语法有错误,我似乎无法追查到。我已经大大简化了代码,但错误仍然存​​在。这是我第一次使用准备好的语句,所以它可能是相当基本的东西,但 google-ing 仍然没有帮助我。我想要做的是用我在变量中移交的一组参数更新一个表(在给定的示例中,我用一个简单的“4”(不在变量中)替换了这组参数,并且只移交了参数选择行作为变量)。代码是这样的:

SQLcommand.CommandText = "PREPARE my_prep_statement FROM 'UPDATE tbl1 SET status = 4 WHERE Number =  ?';"
SQLcommand.ExecuteNonQuery()
SQLcommand.Parameters.AddWithValue("@DosiNr", "123")
SQLcommand.CommandText = "EXECUTE my_prep_statement USING @DosiNr;"
SQLcommand.ExecuteNonQuery()

列 Number 的类型是 varchar(8)。 错误消息是“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行的“123”附近使用的正确语法”,并且不会更新我的表.

我正在使用 mySQL 数据库,服务器版本 5.1.41

我有一种强烈的感觉,就是没能在这里看到一些非常简单的东西,但我需要帮助才能发现它:-(

非常感谢!!

2 个答案:

答案 0 :(得分:0)

您不能提供文字作为准备好的语句参数,只允许使用 UDV,请参阅 EXECUTE Statement。将您的值设置为用户定义的变量,然后使用此变量执行语句。 在 SQL 中它看起来像

PREPARE my_prep_statement FROM 'UPDATE tbl1 SET status = 4 WHERE Number =  ?';
SET @var := 123;
EXECUTE my_prep_statement USING @var;

所以你需要类似的东西

SQLcommand.CommandText = "PREPARE my_prep_statement FROM 'UPDATE tbl1 SET status = 4 WHERE Number =  ?';"
SQLcommand.ExecuteNonQuery()
SQLcommand.CommandText = "SET @var := @DosiNr;"
SQLcommand.Parameters.AddWithValue("@DosiNr", "123")
SQLcommand.ExecuteNonQuery()
SQLcommand.CommandText = "EXECUTE my_prep_statement USING @var;"
SQLcommand.ExecuteNonQuery()

@var 可能会被 VB.Net 视为未设置值的查询参数,并出现相应的错误......如果是这样,我不知道如何处理这个问题。< /p>

答案 1 :(得分:0)

使用来自 API 的准备好的语句时,您不使用 SQL PREPARE 语法,而是使用特定的 API 函数。对于 .Net,它是 SqlCommand.Prepare

documentation 提供了一个很好的例子。

相关问题