相关疑难解决方法(0)

参数化查询如何帮助SQL注入?

在查询1和2中,文本框中的文本都插入到数据库中.这里参数化查询的意义是什么?

1.> -------------

SqlCommand cmd = new SqlCommand("INSERT INTO dbo.Cars " +"VALUES(@TagNbr);" , conn);
cmd.Parameters.Add("@TagNbr", SqlDbType.Int);
cmd.Parameters["@TagNbr"].Value = txtTagNumber.Text;
Run Code Online (Sandbox Code Playgroud)

2.> --------------

int tagnumber = txtTagNumber.Text.ToInt16(); /* EDITED */
INSERT into Cars values(tagnumber.Text); /* then is it the same? */
Run Code Online (Sandbox Code Playgroud)

此外,在这里我将使用正则表达式验证来停止插入非法字符.

.net c# sql sql-server-2005 parameterized-query

52
推荐指数
4
解决办法
4万
查看次数

如何在带有参数的SQL查询中使用通配符

假设我有一个基本查询,如下所示:

 SELECT holiday_name
 FROM holiday
 WHERE holiday_name LIKE %Hallow%
Run Code Online (Sandbox Code Playgroud)

这在我的SQL查询窗格中执行正常并返回'Halloween'.当我尝试在我的代码中使用带有通配符'%'字符的参数时,会出现问题.

SqlConnection Connection = null;
SqlCommand Command = null;

string ConnectionString = ConfigurationManager.ConnectionStrings["SQLdb"].ConnectionString;
string CommandText = "SELECT holiday_name "
                   + "FROM holiday "
                   + "WHERE holiday_name LIKE %@name%";
Connection = new SqlConnection(ConnectionString);

try
{
      Connection.Open();
      Command = new SqlCommand(CommandText, Connection);
      Command.Parameters.Add(new SqlParameter("name", HolidayTextBox.Text));
      var results = Command.ExecuteScalar();
}

catch (Exception ex)
{   
     //error stuff here       
}

finally
{
    Command.Dispose();
    Connection.Close();
}
Run Code Online (Sandbox Code Playgroud)

这会引发错误的语法错误.我已经尝试将'%'移动到我的参数中

Command.Parameters.Add(new SqlParameter("%name%", HolidayTextBox.Text));
Run Code Online (Sandbox Code Playgroud)

但后来我收到一条错误,说我没有声明标量变量'@name'.那么,如何正确格式化通配符以包含在查询参数中?任何帮助表示赞赏!

c# sql

13
推荐指数
2
解决办法
2万
查看次数

使用sql参数转义SQL LIKE语句中的特殊字符

我有一张包含产品的表格.我需要查询查找所有匹配结果到用户输入值.我SqlParameter用于插入输入.

SqlCommand findProcutsByPattern = new SqlCommand(
    "SELECT *" +
    " FROM [Products]" +
    " WHERE ProductName LIKE @pattern", connection);

findProcutsByPattern.Parameters.AddWithValue("@pattern", '%' + pattern + '%');
Run Code Online (Sandbox Code Playgroud)

当用户输入字符串包含'_'或'%'时,问题就出现了,因为它们被解释为特殊字符.另一方面,考虑到这一点:

命令对象使用参数将值传递给SQL语句或存储过程,从而提供类型检查和验证.与命令文本不同,参数输入被视为文字值,而不是可执行代码.

我不应该有这样的问题.我是否需要替换/转义输入字符串中的所有'_'和'%',或者是否有更优雅的解决方案.我希望输入被视为文字.

我在表中有一些记录,其中包括名称中的特殊字符(N_EW,N\EW,N%EW,N"EW,N'EW).指定\,"'作为输入工作正常(考虑它们)作为文字).

c# sql sql-server escaping sqlparameter

4
推荐指数
1
解决办法
1万
查看次数