【问题标题】:MySQL/VB.NET(Winform) - How to use correctly @var?MySQL/VB.NET(Winform) - 如何正确使用@var?
【发布时间】:2019-03-25 17:52:24
【问题描述】:

我正在 MySQL & VB.NET 中开发一个序列,其中,当删除一条记录时,标识它的数字被删除并将 1 到 'n' 的序列,序列如下。

这是 MySQL 的说明。

SET @rownum=0;
UPDATE id_line t, (SELECT @rownum:=@rownum+1 rownum, id_line.* FROM id_line WHERE id_line.line_name=59999 and id_line.line_no<>0) r 
SET t.line_no = r.rownum 
WHERE (t.id_line_b = r.id_line_b)

在 VB.net 中我使用这个

cmdB = New MySqlCommand("SET @rownum=0 UPDATE id_line t, (SELECT @rownum=:@rownum+1 rownum, id_line.* FROM id_line WHERE id_line.line_name='" & TextBox1.Text & "' and id_line.line_no<>0) r ) SET t.line_no = r.rownum WHERE(t.id_line_b = r.id_line_b)", conn)

但 VB 发送此错误

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'UPDATE id_line t, (SELECT @rownum=:@rownum+1 rownum, id_line.* FROM id_lin' at line 1'附近使用正确的语法

你能帮我解决这个错误吗?

更新 1: 这是我的字符串连接。

Public conString As String = "Data Source=server_one;port=3306;Initial Catalog=test_db;User Id=root;password=root;Allow User Variables=True"

【问题讨论】:

  • 首先,我在SET @rownum=0; 的末尾看到一个分号,但它没有出现在 VB.NET 代码的字符串中。
  • 是的,代码的第一部分是针对数据库引擎的,在VB.NET中添加分号,但错误仍然存​​在。

标签: mysql vb.net winforms


【解决方案1】:

其他更好的方法 创建mysqlprocedure用于删除mysql数据查询

https://www.tutorialspoint.com/What-is-stored-procedure-and-how-can-we-create-MySQL-stored-procedures

【讨论】:

  • 感谢您的贡献,但错误在VB中,在MySQL引擎中工作正常,无论如何我会尝试您提出的方法。再次感谢你。问候。
【解决方案2】:

我发现了错误,一个括号,放错地方了,这是正确的代码。

cmdB = New MySqlCommand("SET @rownum:=0; UPDATE id_line t, (SELECT @rownum:=@rownum+1 rownum, id_line.* FROM id_line WHERE id_line.line_name='" & TextBox1.Text & "' and id_line.line_no<>0) r SET t.line_no = r.rownum WHERE(t.id_line_b = r.id_line_b)", conn)

感谢大家的关注和支持。

问候。

【讨论】:

  • 很高兴您发现了错误,但请使用参数。该 TextBox1.Text 可能会损坏您的数据库。需要通过将其设置为参数值来对其进行清理,该参数值将被数据库引擎视为不可执行代码的值。
  • 好的,我明白了,代码在执行 MySQLCommand 的语句之前更新了一个变量,也可以工作!。也非常感谢您的贡献。
猜你喜欢
  • 1970-01-01
  • 2017-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多