显示记录是通过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找到的"。当我输入文斯·沃克的时候就会显示"记录是按名字找到的"

显示记录是通过Name还是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注入,并且作为奖励,您可以获得适当的值解析。