Ошибка "выражение не указанного типа" при выполнении SQL из.Net
Я получаю эту ошибку:
Выражение не булева типа, указанное в контексте, где ожидается условие, около 'likeram'.
Я вошел в "баран" в txt_name
:
SqlConnection con = new SqlConnection(
@"Data Source=DELL_LAPTOP\sqlexpress;Integrated Security=True");
DataTable dt = new DataTable();
SqlDataAdapter SDA = new SqlDataAdapter(
"SELECT * FROM newproj where name like" + txt_name.Text, con);
SDA.Fill(dt);
dataGridView1.DataSource = dt;
3 ответа
Вам не хватает пробела между like
и конкатенация строк и кавычка вокруг параметра:
SqlDataAdapter SDA = new SqlDataAdapter(
string.Format("SELECT *
FROM newproj
WHERE name like '{0}'" txt_name.Text), con);
Хотя я бы посоветовал вам не использовать этот метод, так как он подвержен SQL-инъекциям. Вместо этого используйте параметры SQL:
SqlCommand command = new SqlCommand("SELECT * FROM newproj where name like @text");
command.Parameters.AddWithValue("text", txtName.Text);
var sqlAdapter = new SqlDataAdapter(command);
Ты пропускаешь '
кавычки внутри строки, но вы все равно не должны вставлять текст в ваши SQL-запросы, так как они представляют серьезную опасность для SQL-инъекций:
Вы также должны убедиться, что %
символы включены в like
в противном случае он найдет только точные совпадения:
var dt = new DataTable();
using(var con = new SqlConnection(@"...")
using(var cmd = new SqlCommand(@"
select *
from newproj
where name like '%' + @text + '%'") // Add % wildcards
{
cmd.Parameters.AddWithValue("text", txtName.Text); // Safe from SQL injection
var sda = new SqlDataAdapter(command);
sda.Fill(dt);
dataGridView1.DataSource = dt;
}
Также обратите внимание, что вы всегда должны распоряжаться объектами команд и соединений SQL, и что using
это лучший способ сделать это.
Вы пропустили пробел и один qoute в запросе
SqlDataAdapter SDA = new SqlDataAdapter(
"SELECT * FROM newproj where name like '" + txt_name.Text+"'", con);
вы используете "лайк" в условии "где", но вы не добавили дикие символы, если вам нужны записи с точным соответствием, нет необходимости в "лайке", используйте "name="
как ниже
SqlDataAdapter SDA = new SqlDataAdapter(
"SELECT * FROM newproj where name = '" + txt_name.Text+"'", con);
если вы хотите искать с именем, как использовать ниже
SqlDataAdapter SDA = new SqlDataAdapter(
"SELECT * FROM newproj where name like '%" + txt_name.Text+"%'", con);