#.net #mysql #vb.net #variables #ado.net
#.net #mysql #vb.net #переменные #ado.net
Вопрос:
Я довольно новичок в VB.NET поэтому я много исследую, когда сталкиваюсь с ошибками. Проблема в том, что я не могу найти решение для этого или что-либо удаленное, связанное с этим.
Я разрабатываю программное обеспечение для подключения к удаленному серверу mysql, запуска запроса и возврата с набором данных. Я запустил этот запрос к серверу через приглашение mysql и успешно получил результат. Но когда я пытаюсь выполнить этот запрос из своего приложения, я получаю ошибку ссылки на объект.
В процессе отладки я обнаружил, что символ @, используемый для переменных в строках sql, вызывает проблему в моем коде, но я не могу найти способ передать этот запрос на сервер без ошибок Visual studio, вызывающих ошибки. Каждый ответ на использование переменных, который я нашел, предлагает конкретно указывать значения переменных в моем коде, чего я не хочу делать.
Вот немного моего кода и моего запроса:
Dim mysqlCon As MySqlConnection = New MySqlConnection("Server=" amp; arrArgs amp; ";Database=DBNAME;Uid=USER;Pwd=PASS;allow zero datetime=true;")
Dim mysqlString As String = "set @from_scanner = '" amp; code amp; "'; 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:
Имена полей из самого запроса не должны содержать @ в них. Только переменные, которые вы заменяете значениями. В качестве примера я приведу вам очень простой sql-запрос для обновления строки из таблицы:
Dim sqlString as String = "UPDATE tableName SET Disc_Price=@Price WHERE Code=@Code"
В этом случае tableName — это имя вашей таблицы, Disc_Price — это имя столбца, Code — это имя столбца. Это обновит значение в поле Disc_Price на то, какое вы укажете значение для @Price, для строки или строк, которые соответствуют @Code в поле Code.
Затем вы настраиваете команду и определяете параметры запроса:
Dim cmd As New MySqlCommand(sqlString, mysqlConn)
cmd.Parameters.AddWithValue("@Price", 1.25)
cmd.Parameters.AddWithValue("@Code",WhateverCodeHere)
cmd.ExecuteNonQuery()
Убедитесь, что только ваши параметры / переменные sql в запросе имеют @, и все должно быть в порядке.
Я также заметил в вашей строке, что имя таблицы и ключевое слово UPDATE отсутствовали в строке запроса с вашим НАБОРОМ.
Комментарии:
1. Ценю быстрый ответ.
2. Моя проблема в том, что единственная информация, которую я передаю серверу, — это код элемента из сканера, и я отправляю это через переменную VB «code». Я создал переменные mysql в запросе, потому что сам запрос выполняет всю работу и присваивает / переназначает переменные mysql во время выполнения запроса к базе данных. Таким образом, сервер mysql выполняет всю работу и просто предоставляет единственную запись в VB в виде набора данных. Я не хочу устанавливать значения переменных в VB. Я хочу передать контейнеры переменных в mysql и заставить запрос заполнить значения.
3. Теперь я понимаю, что вы имеете в виду. К сожалению, я думаю, вы застряли. Я почти уверен, что в этом случае вам пришлось бы фактически заменить переменные sql запросами в вашей строке запроса в коде. Извините, что я не смог больше помочь : (