"指定非布尔类型的表达式"从.Net执行SQL时出错

时间:2015-08-05 10:46:10

标签: c# sql .net sqlclient

我收到此错误:

  

在上下文中指定的非布尔类型的表达式   条件是预期的,靠近' likeram'。

我进入" ram"在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 个答案:

答案 0 :(得分:2)

您错过了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);

答案 1 :(得分:2)

你在字符串中缺少'引号,但你不应该像这样在你的SQL查询中插入文本,因为它们是一个主要的SQL注入风险:

enter image description here

您还需要确保%中包含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是执行此操作的最佳方法。

答案 2 :(得分:1)

您在查询中错过了空格和单个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);