Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串';按CHECKTIME DESC'订购;_C#_Sql_Sql Server_Database_Visual Studio - Fatal编程技术网

C# 字符串';按CHECKTIME DESC'订购;

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

我的C#应用程序中的一个搜索栏文本框出现了严重的验证问题

每次我运行程序并输入文本、数字甚至某些特殊字符时,我都不会遇到任何问题。。。然而,当我第二次使用引号(')时,出现了标题中的错误

以下是我在执行特定流程时使用的代码,请有人帮我保存:

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-我不知道。我更正了答案。谢谢。:)