C# 字符串';按CHECKTIME DESC'订购;
我的C#应用程序中的一个搜索栏文本框出现了严重的验证问题 每次我运行程序并输入文本、数字甚至某些特殊字符时,我都不会遇到任何问题。。。然而,当我第二次使用引号(')时,出现了标题中的错误 以下是我在执行特定流程时使用的代码,请有人帮我保存:C# 字符串';按CHECKTIME DESC'订购;,c#,sql,sql-server,database,visual-studio,C#,Sql,Sql Server,Database,Visual Studio,我的C#应用程序中的一个搜索栏文本框出现了严重的验证问题 每次我运行程序并输入文本、数字甚至某些特殊字符时,我都不会遇到任何问题。。。然而,当我第二次使用引号(')时,出现了标题中的错误 以下是我在执行特定流程时使用的代码,请有人帮我保存: SqlDataAdapter sda1 = new SqlDataAdapter( "SET ROWCOUNT 25 select ui.USERID [User ID], ui.BADGENUMBER [Em
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会将字符串中的单引号解释为表示该字符串的结尾 您必须在SQL-
'
中转义'
。下面是一个示例,说明了如何使用参数实现这一点
string SQL = "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 @SearchText ORDER BY CHECKTIME DESC ";
SqlCommand cmd = new SqlCommand(SQL, con);
cmd.Parameters.Add("@SearchText", SqlDbType.VarChar).Value = "%" + searchBar.Text + "%";
SqlDataAdapter sda1 = new SqlDataAdapter(cmd);
这将参数化查询并转义搜索文本中的任何单引号。永远不要连接用户输入以创建SQL。请搜索“Bobby表”。您应该使用一个参数,即
。。。ui.NAME类似“%”++@NAME++“%”ORDER BY…
,其中@NAME
是一个参数,它是从搜索栏.Text
中给定的值。如果您的大多数数据访问都是这样的,那么您需要立即停止,重新访问整个数据访问层:它已被危险地破坏。@布朗先生,如果您不这样使用,因为可能会有SQL注入的机会。@DhavalPatel我想说,这是肯定的;我正在研究参数,我还在学习如何创建和使用干净的代码,所以感谢你的批评和建议。上帝保佑你,先生,绝对的救命恩人!我现在正在学习参数,因为我需要在我的许多表单中实现使用干净代码搜索数据库的方法。如果使用参数,则执行searchBar.Text.Replace(“”,“”)
bit是不正确的-它应该是.Value=“%”+searchBar.Text+“%”代码>@MarcGravel-我不知道。我更正了答案。谢谢。:)