显示是否按名称或EmpID查找记录

时间:2013-05-28 17:30:06

标签: c# sql sql-server winforms ado.net

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找到记录”。当我输入文斯沃克时,它就像“记录是由名字找到的”。

2 个答案:

答案 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注入攻击,并且作为奖励,您可以获得适当的值解析。