Как найти входную строку в базе данных

#vb.net #visual-studio-2008 #sql-server-2008

#vb.net #visual-studio-2008 #sql-server-2008

Вопрос:

Я хочу найти текст в текстовом поле в моей базе данных. Я написал приведенный ниже код. Он хорошо находит числа, но когда я хочу найти строки, он выдает ошибку времени выполнения: invalid column name for example aaa , но aaa существует в столбце 1 в моей таблице.

Что вы думаете о проблеме?

     cmd = New SqlCommand("select * from tbl where column1="   TextBox1.Text)
    cmd.CommandType = CommandType.Text
    cmd.Connection = cnn
    dad.SelectCommand = cmd
    cmd.ExecuteNonQuery()
    dad.Fill(ds)
    dgv.DataSource = ds.Tables(0)
 

Комментарии:

1. Разверните код, подобный этому, и это только вопрос времени (и, вероятно, не так много), пока кто-нибудь не получит доступ к вашей базе данных.

Ответ №1:

Это потому, что отправляемый вами оператор sql не разделяет TextBox1.Text значение, поэтому в итоге вы получаете этот sql:

select * from tbl where column1 = aaa

и SQL Server обрабатывает aaa как имя столбца.

Независимо от этого, вы должны использовать a SqlParameter , чтобы избежать атак sql-инъекций:

 cmd = New SqlCommand("select * from tbl where column1=@value") 
cmd.CommandType = CommandType.Text 
cmd.Paramaters.AddWithValue("@value", TextBox1.Text)
 

VB не является моим основным языком, поэтому синтаксис может быть немного неточным, но вы должны быть в состоянии заставить его работать.

Ответ №2:

Адритт прав, вы должны заключить текст для поиска в одинарные кавычки, и, при условии, что сам текст не содержит одинарных кавычек, все хорошо для риска SQL-атак.

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

Вы должны окончательно изучить технологию LINQ, где:

  • У вас нет подключения для открытия или закрытия: его автоматическое
  • Вам не нужно иметь дело с кавычками, crlf и запятыми
  • Вы не рискуете SQL-атаками: запросы параметризуются механизмом LINQ
  • Вы получите выгоду от intellisense в отношении объектов базы данных: таблиц, представлений, столбцов
  • Вы получаете простой результат для использования в качестве источника данных!
  • Для инструкций INSERT и UPDATE транзакции включаются автоматически.

Пример:

 using ctx as new dataContext1
  dim result = from r in ctx.tbl
    where r.column1 = textBox1.text

    dgv.datasource = result.tolist
end using
 

IntelliSense:

  • Когда вы вводите «ctx.», вам будет представлен список доступных таблиц!
  • Когда вы вводите «r». вам будет представлен список столбцов, которые содержит таблица (или vieww)!

LINQ не сложен в освоении, и вы найдете множество примеров, которые помогут вам, здесь и там в Интернете.

И последнее, но не менее важное: вы можете использовать синтаксис, подобный LINQ SQL, для запроса XML-данных, CSV-файлов, электронных таблиц Excel и даже элементов управления в вашей форме или документе HTML DOM в ASP.NET !