3
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 还是 Name 找到的。例如,我输入 4003 文本框或标签等将类似于 "The record is found by EmpID" 。当我输入 Vince Walker 时,它会像 "The record is found by Name" 。

4

2 回答 2

6

首先,您有一个需要修复的 SQL 注入漏洞。 本文应该让您关注参数化查询。

其次,您可以在查询中添加一个 case 语句来指示匹配的值。例子:

SELECT CASE WHEN EmpID = @EmpId 
           THEN 1 
           ELSE 0
       END AS MatchedEmpId
FROM Whatever
于 2013-05-28T17:37:49.620 回答
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 注入的影响,并且作为奖励,您可以获得正确的值解析。

于 2013-05-28T17:32:04.963 回答