Как найти входную строку в базе данных - PullRequest
1 голос
/ 31 октября 2011

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

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

    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)

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

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

select * from tbl where column1 = aaa

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

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

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

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

1 голос
/ 31 октября 2011

Адритт прав, вы должны заключить текст в одинарные кавычки, и, если в самом тексте нет одинарных кавычек, все хорошо - кроме риска 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!

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