Ошибка "выражение не указанного типа" при выполнении 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);
Другие вопросы по тегам