Передача @ (в знак)-переменные в MySQL - PullRequest
1 голос
/ 11 ноября 2011

Я довольно новичок в VB.NET, поэтому я много исследую, когда сталкиваюсь с ошибками.Проблема в том, что я не могу найти решение этой проблемы или что-либо, что имеет к этому отношение.

Я занимаюсь разработкой программного обеспечения для подключения к удаленному серверу MySQL, запуска запроса и возврата с набором данных.Я запустил этот запрос к серверу через приглашение MySQL и получил результат успешно.Но когда я пытаюсь выполнить этот запрос из моего приложения, я получаю ошибку ссылки на объект.

Посредством отладки я обнаружил, что символ @, используемый для переменных в строках sql, вызывает проблему в моем коде, но я не могу найти способ передать этот запрос на сервер без визуальных студийных ошибок.Каждый ответ на использование переменных, которые я нашел, предлагает конкретно указать значения переменных в моем коде, что я не хочу делать.

Вот немного моего кода и моего запроса:

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.

1 Ответ

2 голосов
/ 11 ноября 2011

Имена полей из самого запроса не должны содержать @. Только переменные, которые вы заменяете значениями. Я приведу очень простой 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...