Intereting Posts
Как запустить хранимую процедуру SQL через C # в определенное время? Не удается подключиться к MySQL при использовании режима отладки Как можно улучшить этот запрос? Способ вставки текста с (апострофом) в таблицу SQL Идея для написания запроса mysql SQL-запрос для преобразования столбцов в графы строк Если существуют два одинаковых поля, добавьте другое обновление Выберите самую последнюю строку с GROUP BY в MySQL Синтаксис MySQL UPDATE с несколькими таблицами с использованием предложения WHERE Выбор максимальной суммы двух столбцов Какова асимптотическая сложность работы GroupBy? Есть ли какое-либо эмпирическое правило для создания SQL-запроса из удобочитаемого описания? Запрос ActiveRecord для возврата связанных документов с использованием связанных документов Как узнать временное пространство, которое потребуется для SQL-запроса в базе данных? Вывод запроса в файл дает отказ в доступе

Как использовать параметры «@» в команде SQL в VB

У меня есть этот код для обновления моей базы данных SQL из данных в текстовом поле в VB. Мне нужно использовать параметры, если текст содержит тиковую метку, или цитату »и т. Д. Вот что я имею:

dbConn = New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP") dbConn.Open() MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = '" & TicBoxText.Text & _ "'WHERE Number = 1", dbConn) MyDataReader = MyCommand.ExecuteReader() MyDataReader.Close() dbConn.Close() 

И это моя хромая попытка установить параметр из того, что я видел в Интернете, что я не очень хорошо понимаю.

 dbConn = New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP") dbConn.Open() MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = @'" & TicBoxText.Text & _ "'WHERE Number = 1", dbConn) MyDataReader = MyCommand.ExecuteReader() MyDataReader.Close() dbConn.Close() 

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

Вы на правильном пути, чтобы избегать Bobby Tables , но ваше понимание параметров @ является неполным.

Именованные параметры ведут себя как переменные на языке программирования: во-первых, вы используете их в своей команде SQL, а затем вы указываете их значение в своей программе VB.NET или C #, например:

 MyCommand = New SqlCommand("UPDATE SeansMessage SET Message = @TicBoxText WHERE Number = 1", dbConn) MyCommand.Parameters.AddWithValue("@TicBoxText", TicBoxText.Text) 

Обратите внимание, как текст вашей команды стал самодостаточным: он больше не зависит от значения текста из текстового поля, поэтому пользователи не могут сломать ваш SQL, вставив их собственную команду. @TicBoxText стал именем переменной, которая обозначает значение в тексте команды; вызов AddWithValue поставляет значение. После этого ваш ExecuteReader готов к работе.

Здесь есть ряд улучшений:

 Using dbConn As New SqlConnection("server=.\SQLEXPRESS;Integrated Security=SSPI; database=FATP"), _ MyCommand As SqlCommand("UPDATE SeansMessage SET Message = @Message WHERE Number = 1", dbConn) 'Make sure to use your exact DbType (ie: VarChar vs NVarChar) and size MyCommand.Parameters.Add("@Message", SqlDbType.VarChar).Value = TicBoxText.Text dbConn.Open() MyCommand.ExecuteNonQuery() ' don't open a data reader: just use ExecuteNonQuery End Using 'Using block will close the connection for you