using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString))
{
myDatabaseConnection.Open();
using (SqlCommand mySqlCommand = new SqlCommand("Select EmpID, Name from Employee WHERE EmpID = @EmpID OR Name = @Name ", myDatabaseConnection))
{
mySqlCommand.Parameters.AddWithValue("@EmpID", textBox1.text);
mySqlCommand.Parameters.AddWithValue("@Name", textBox1.text);
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(mySqlCommand);
adapter.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
}
}
示例数据库
EmpID Name
4001 Johnny Bravo
4002 Bruce Smith
4003 Vince Walker
当我在textBox1上输入4001时,这就是结果
EmpID Name
4001 Johnny Bravo
当我在textBox1上输入Bruce Smith时,这就是结果
EmpID Name
4002 Bruce Smith
我需要的是显示是通过EmpID还是名称查找记录。例如,我键入4003文本框或标签等将类似“由EmpID找到记录”。当我输入文斯沃克时,它就像“记录是由名字找到的”。
答案 0 :(得分:6)
首先,您有一个SQL注入漏洞需要修复。 This article应该让您盯着参数化查询。
其次,您可以将case语句放入查询中以指示匹配的值。例如:
SELECT CASE WHEN EmpID = @EmpId
THEN 1
ELSE 0
END AS MatchedEmpId
FROM Whatever
答案 1 :(得分:0)
添加到Abe Miessler的答案,快速提示 - >使用参数化查询:
using (var mySqlCommand = new SqlCommand("Select EmpID, Name from Employee WHERE EmpID = @EmpID OR Name = @Name", myDatabaseConnection))
{
mySqlCommand.Parameters.AddWithValue("@EmpID", textBox1.text);
// etc..
}
它可以保护您免受SQL注入攻击,并且作为奖励,您可以获得适当的值解析。