显示记录是按名称还是 EmpID 查找的
Posted
技术标签:
【中文标题】显示记录是按名称还是 EmpID 查找的【英文标题】:Show whether the record is find by Name or EmpID 【发布时间】:2013-05-23 18:41:33 【问题描述】: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" 。
【问题讨论】:
你可能想要使用 SQL 参数,否则你很容易受到 SQL 注入的攻击。 【参考方案1】:添加到 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 注入的影响,并且作为奖励,您可以获得正确的值解析。
【讨论】:
【参考方案2】:首先,您有一个需要修复的 SQL 注入漏洞。This article 应该让您关注参数化查询。
其次,您可以在查询中插入一个 case 语句来指示匹配的值。示例:
SELECT CASE WHEN EmpID = @EmpId
THEN 1
ELSE 0
END AS MatchedEmpId
FROM Whatever
【讨论】:
哦!这是漫长的一天 :) 完全是的,这应该可行 :) +1,伙计以上是关于显示记录是按名称还是 EmpID 查找的的主要内容,如果未能解决你的问题,请参考以下文章
Spring @Autowired 是按名称还是按类型注入 bean?