.net - 将@(at 符号)-变量传递给 MySQL

标签 .net mysql vb.net variables ado.net

我是 VB.NET 的新手,所以当我遇到错误时我会进行大量研究。问题是我找不到解决这个问题的方法,也找不到任何远程处理它的方法。

我正在开发连接到远程 mysql 服务器、运行查询并返回数据集的软件。我已通过 mysql 提示符对服务器运行此查询并已成功收到结果。但是当我尝试从我的应用程序运行此查询时,我收到对象引用错误。

通过调试,我发现用于 sql 字符串中变量的 @ 字符导致了我的代码中的问题,但我无法找到一种方法将此查询传递给服务器而不会引发 visual studio 抛出错误。我发现的每个变量使用的答案都建议在我的代码中明确规定变量值,我不想这样做。

这是我的一些代码和我的查询:

Dim mysqlCon As MySqlConnection = New MySqlConnection("Server=" & arrArgs & ";Database=DBNAME;Uid=USER;Pwd=PASS;allow zero datetime=true;")
Dim mysqlString As String = "set @from_scanner = '" & code & "'; set @code='', @altbarcode='', @qty='1', @price='',@Altprice='0', @date_start='',@date_end='',@disc_price='0',@description='', @altdescription=''; set @from_scanner=if(left(@from_scanner,2)='FF',trim(substring(@from_Scanner,3,13)),trim(substring(@from_Scanner,2,13))); select code, altbarcode,description, qty, price into @code, @altbarcode,@altdescription, @qty, @Altprice from altbar where altbarcode=@from_scanner; set @code=if(@code='',@from_Scanner,@code); select disc_price, date_end into @disc_price, @date_end from plu where (code=trim(left(@code,12)) or def_barcode=@code) and current_date between date_start and date_end and disc_price<>price and disc_price<>0; select price, description into @price, @description from plu where code=trim(left(@code,12)) or def_barcode=@code; set @price=if(ifnull(@disc_price,0)=0 or @disc_price='', @price,@disc_price); set @price=if(@qty>1 and @Altprice > 0, @Altprice, @price*@qty); set @description=if(@altdescription<>'', @Altdescription, @description); select @code, format(@price,2) Price, @description,@date_end;"
Dim mysqlCom As MySqlCommand = New MySqlCommand(mysqlstring, mysqlCon)
Dim mysqlAdapter As New MySqlDataAdapter
Dim mysqlData As New DataSet

mysqlCon.Open()

mysqlAdapter.SelectCommand = mysqlCom
mysqlAdapter.Fill(mysqlData, "tblDBData")

所以我真正需要知道的是如何将这个查询传递给 mysql 服务器而不在 VB 中引起问题。

最佳答案

查询本身的字段名称中不应包含 @。只有您要用值替换的变量。我会给你一个非常简单的 sql 查询来更新表中的一行,例如:

Dim sqlString as String = "UPDATE tableName SET Disc_Price=@Price WHERE Code=@Code"

在这种情况下,tableName 是您的表的名称,Disc_Price 是列名称,Code 是列名称。它会将 Disc_Price 字段中的值更新为您告诉它的 @Price 的值,对于与代码字段中的@Code 匹配的行。

然后设置命令并定义查询参数:

Dim cmd As New MySqlCommand(sqlString, mysqlConn)
cmd.Parameters.AddWithValue("@Price", 1.25)
cmd.Parameters.AddWithValue("@Code",WhateverCodeHere)

cmd.ExecuteNonQuery()

确保查询中只有您的参数/sql 变量有@,您应该没问题。

我还注意到在您的字符串中,表名和 UPDATE 关键字不在您的 SET 查询字符串中。

关于.net - 将@(at 符号)-变量传递给 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091543/

相关文章:

asp.net - 以编程方式编辑 Web.config

.net - BinaryReader ReadByte() 是否超时?

c# - 导出或保存 CX509PrivateKey

mysql - 结合来自同一张表的连接和联合

mysql - 在第一个查询中使用所选列并在第二个查询中使用 IN 子句

从 VB.net 调用 DLL 导致堆异常

.net - 如何在 .Net 中解析 SAML 断言请求

c# - VS中的奇怪警告

MySQL 查询帮助 - 将 != 与 ANY 一起使用

vb.net - RecieveBufferSize 超出范围异常 (.NET)