避免SQL漏洞注入攻击,往往采用的是参数化查询!然而在使用参数化查询中,往往为了方便就直接通过构造方法来进行数据的初始化了,然而这样就引发一个这样的问题,当参数值为0时,就出现参数为空的情况了。

一.参数化查询的几种写法:

  • 使用parameter写法:
    • 写法一:
    • Parameter  p =new Parameter("@id",值);
      cmd.Parameters.Add(p);
    • 写法二(推荐):
    • Parameter p =new Parameter()
      {ParameterName="@id",Value="值"};
      cmd.Parameters.Add(p);
  • 使用parameter数组写法:
    • 写法一:
    •  SqlParameter[] pms= {
      new SqlParameter("@id",值),
      .......
      } ;
      cmd.Parameter.AddRange(pms);
    • 写法二(推荐):
    •  SqlParameter[] pms= {
      new SqlParameter("@id", SqlDbType.VarChar),
      .......
      } ;
      parameters[].Value = "值";
      cmd.Parameter.AddRange(pms);

二.通过构造方法存在的一点问题:

  在参数化查询使用使用构造方法时,在进行构造方法匹配时:零(0)会被匹配成 MySqlDbType类型

  • MySqlParameter的几种构造方法:
     public MySqlParameter();
public MySqlParameter(string parameterName, MySqlDbType dbType);
public MySqlParameter(string parameterName, object value);
public MySqlParameter(string parameterName, MySqlDbType dbType, int size);
public MySqlParameter(string parameterName, MySqlDbType dbType, int size, string sourceColumn);
public MySqlParameter(string parameterName, MySqlDbType dbType, int size, ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, DataRowVersion sourceVersion, object value);

问:0为什么没有匹配成object类型方法呢?

解释:MySqlDbType是一个枚举类型,0就对应了Decimal类型了

public enum MySqlDbType
{
Decimal = ,
Byte = ,
Int16 = ,
Int32 = ,
Float = ,
Double = ,
Timestamp = ,
Int64 = ,
Int24 = ,
Date = ,
Time = ,
DateTime = ,
[Obsolete("The Datetime enum value is obsolete. Please use DateTime.")]
Datetime = ,
Year = ,
Newdate = ,
VarString = ,
Bit = ,
}

注:所以在进行参数化查询时,尽量选择方法二,进行参数化查询

ADO.net参数化查询陷阱的更多相关文章

  1. SQL Server 2008 R2——VC++ ADO 操作 参数化查询

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  2. 关于ADO.NET参数化查询的提问

    最近我们的正式环境一直在报错一个异常,首先我贴出来异常信息 BLL层 捕获到了请求的url Net.BLL.MobileFun MobileFun.GetBusinessBidPolicy 异常 传入 ...

  3. ADO.NET 参数化查询

    参数化查询 使用参数化查询的情景有很多,但最常用的情景是需要用户在查询中进行输入的情况. 有两种方法可供使用.第一,可以讲用户输入嵌入到查询字符串中,例如可能使用.NET Framework中的Str ...

  4. C# SqlServer Ado.net参数化查询插入null数据

    DateTime? dt=null; if (dt.HasValue) { cmd.Parameters.AddWithValue("@CreateDateTime", dt); ...

  5. 第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获得连接字符串

    第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获 ...

  6. ADO学习笔记之注入漏洞与参数化查询

    ADO学习笔记之注入漏洞与参数化查询 作为新手,在学习ADO程序时,使用 sql 语言查询数据时,很容易写类似如下代码: using (SqlConnection con = new SqlConne ...

  7. (ADO.NET)SqlCommand参数化查询

    string strcon = "Persist Security Info=False;User id=sa;pwd=lovemary;database=student;server=(l ...

  8. SQL参数化查询

    参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...

  9. SQL参数化查询自动生成SqlParameter列表

    string sql = @"INSERT INTO stu VALUES (@id,@name) "; 参数化查询是经常用到的,它可以有效防止SQL注入.但是需要手动去匹配参数@ ...

随机推荐

  1. Java读取其他jar包里的配置文件

    最近要做个东西,需要自己控制数据库的事物,项目封装的框架,实在是提不起去阅读的兴趣, 就想直接去读框架的底层实现里面的数据连接的配置文件(如:Url,port,username,password等), ...

  2. css中盒子宽高的auto

    CSS盒模型中,auto属性只适用于外margin和width,height,border和padding不适用.下面就来说说它的情况.这里所说的都是标准流盒子. 1.横向来说 (1)若设置width ...

  3. Grunt实现自动化单元测试

    http://www.tuicool.com/articles/rAnaYvn   直奔主题: 一.安装grunt-contrib-qunit npm install grunt-contrib-qu ...

  4. 2.8. 创建 NSManagedObject 的子类 (Core Data 应用程序实践指南)

    现在根据模型来创建NSManagedObject的子类.如果模型改变了,那就就重新生成这些文件.所以,不要在生成的文件里自定义方法,因为重新生成之后,这些修改就丢失了.假如确实需要重新生成自定义的方法 ...

  5. angular指令中,require和transclude同时设置为true时的作用

    最近在学习angularJS指令的时候,对指令对象中require属性和transclude属性同时设置为true比较疑惑,于是自己动手测试一下具体差异 index.html: <simple& ...

  6. js原生设计模式——2面向对象编程之继承—原型继承(类式继承的封装)

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  7. bat-bat-bat (重要的事情说三遍)

    去年noip前prey亲授,当时就觉得这是个好东西!非常好!然后我就没学会.接着最近被安利小红的bat!!! 小红bat!!! get!!!谢小红!!! -----> http://www.cn ...

  8. HTML5行业现状与未来 - 2016年终大盘点

    * { margin: 0; padding: 0 } .con { width: 802px; margin: 0 auto; text-align: center; position: inher ...

  9. Kafka 0.10 SocketServer源代码分析

    1概要设计 Kafka SocketServer是基于Java NIO来开发的,采用了Reactor的模式,其中包含了1个Acceptor负责接受客户端请求,N个Processor负责读写数据,M个H ...

  10. 工作总结之Git

    工作中,终端数据的制作好后,使用的是SmartGit(注:Git的一个客户端)来push到服务器:但是出现了奇怪的现象: 1.git checkout到本地的目录,理论上目录下有包括新增,删除,变更在 ...