显示记录是通过Name还是EmpID找到的
本文关键字:EmpID 还是 Name 记录 显示 | 更新日期: 2023-09-27 18:15:39
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];
}
}
Sample数据库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还是Name找到的。例如,我输入4003,文本框或标签等将像"记录是通过EmpID找到的"。当我输入文斯·沃克的时候就会显示"记录是按名字找到的"
首先,您有一个需要修复的SQL注入漏洞。这篇文章应该能让您开始了解参数化查询。
其次,您可以在查询中插入一个case语句,以指示匹配的值。例子:
SELECT CASE WHEN EmpID = @EmpId
THEN 1
ELSE 0
END AS MatchedEmpId
FROM Whatever
对于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注入,并且作为奖励,您可以获得适当的值解析。