【发布时间】:2014-05-19 06:37:16
【问题描述】:
在我的 C# 应用程序中的一个 searchBar 文本框内导致验证时遇到了一个严重问题。
每次我运行程序并输入文本、数字甚至某些特殊字符时,我都没有遇到任何问题...但是,第二次我使用引号 (') 时,我会遇到标题中发现的错误.
以下是我在执行特定过程时使用的代码,请有人救救我:
SqlDataAdapter sda1 = new SqlDataAdapter(
"SET ROWCOUNT 25
select ui.USERID [User ID],
ui.BADGENUMBER [Employee No.],
ui.NAME [Name],
ci.CHECKTIME [Clock Time],
ci.CHECKTYPE [I/O],
ci.SENSORID [Sensor ID]
FROM
USERINFO ui,
CHECKINOUT ci
WHERE
ui.USERID = ci.USERID and
ci.CHECKTYPE in ('I','O') and
ui.NAME like '%" + searchBar.Text + "%'
ORDER BY
CHECKTIME DESC ", con);
提前谢谢大家...
【问题讨论】:
-
永远不要连接用户输入来创建 SQL。请搜索“鲍比桌”。您应该使用参数,即
... ui.NAME like '%' + @name + '%' ORDER BY ...,其中@name是从searchBar.Text获得值的参数。如果您的大部分数据访问看起来像这样,那么您需要立即停止并重新访问您的整个数据访问层:它已经很危险地损坏了。 -
@mrBrown 如果您不这样使用,因为可能存在 SQL 注入的机会。
-
@DhavalPatel 我会说这是肯定的;p
-
我正在研究参数,我还在学习如何创建和使用干净的代码,所以感谢您的批评和建议。
标签: c# sql sql-server database visual-studio