我收到此错误:
在上下文中指定的非布尔类型的表达式 条件是预期的,靠近' 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;
答案 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注入风险:
您还需要确保%
中包含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);