ADO.net参数化查询陷阱
避免SQL漏洞注入攻击,往往采用的是参数化查询!然而在使用参数化查询中,往往为了方便就直接通过构造方法来进行数据的初始化了,然而这样就引发一个这样的问题,当参数值为0时,就出现参数为空的情况了。
一.参数化查询的几种写法:
- 使用parameter写法:
- 写法一:
- Parameter p =new Parameter("@id",值);
- cmd.Parameters.Add(p);
- Parameter p =new Parameter("@id",值);
- 写法二(推荐):
- Parameter p =new Parameter()
- {ParameterName="@id",Value="值"};
- cmd.Parameters.Add(p);
- Parameter p =new Parameter()
- 使用parameter数组写法:
- 写法一:
- SqlParameter[] pms= {
- new SqlParameter("@id",值),
- .......
- } ;
- cmd.Parameter.AddRange(pms);
- SqlParameter[] pms= {
- 写法二(推荐):
- SqlParameter[] pms= {
- new SqlParameter("@id", SqlDbType.VarChar),
- .......
- } ;
- parameters[].Value = "值";
- cmd.Parameter.AddRange(pms);
- SqlParameter[] 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参数化查询陷阱的更多相关文章
- SQL Server 2008 R2——VC++ ADO 操作 参数化查询
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 关于ADO.NET参数化查询的提问
最近我们的正式环境一直在报错一个异常,首先我贴出来异常信息 BLL层 捕获到了请求的url Net.BLL.MobileFun MobileFun.GetBusinessBidPolicy 异常 传入 ...
- ADO.NET 参数化查询
参数化查询 使用参数化查询的情景有很多,但最常用的情景是需要用户在查询中进行输入的情况. 有两种方法可供使用.第一,可以讲用户输入嵌入到查询字符串中,例如可能使用.NET Framework中的Str ...
- C# SqlServer Ado.net参数化查询插入null数据
DateTime? dt=null; if (dt.HasValue) { cmd.Parameters.AddWithValue("@CreateDateTime", dt); ...
- 第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获得连接字符串
第19课-数据库开发及ado.net ADO.NET--SQLDataReader使用.SqlProFiler演示.ADoNET连接池,参数化查询.SQLHelper .通过App.Config文件获 ...
- ADO学习笔记之注入漏洞与参数化查询
ADO学习笔记之注入漏洞与参数化查询 作为新手,在学习ADO程序时,使用 sql 语言查询数据时,很容易写类似如下代码: using (SqlConnection con = new SqlConne ...
- (ADO.NET)SqlCommand参数化查询
string strcon = "Persist Security Info=False;User id=sa;pwd=lovemary;database=student;server=(l ...
- SQL参数化查询
参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) ...
- SQL参数化查询自动生成SqlParameter列表
string sql = @"INSERT INTO stu VALUES (@id,@name) "; 参数化查询是经常用到的,它可以有效防止SQL注入.但是需要手动去匹配参数@ ...
随机推荐
- 避免Node.js中回调地狱
为了解决这个阻塞问题,JavaScript严重依赖于回调,这是在长时间运行的进程(IO,定时器等)完成后运行的函数,因此允许代码执行经过长时间运行的任务. downloadFile('example. ...
- Antx简介(ali_PPT)
Antx的由来: §最早,我们用Makefile来build系统 •Makefile不适合Java的编译 §后来,我们用Ant来build系统 •开始时很不错 •随着项目增多,出现困难 §利用bean ...
- 【WebService】WebService学习笔记
WebService三要素 WebService三要素SOAP(Simple Object Access Protocol).WSDL(WebServicesDescriptionLanguage). ...
- zoom:1-hasLayout
在现代浏览器,如果子元素float,则父元素不会自动被撑开 #nofloatbox { border: 1px solid #FF0000; background: #CCC; width:200px ...
- redis sets类型及操作
sets类型及操作set是集合,它是string类型的无序集合.通过hash table实现,添加.删除.查找的复杂度都是0(1).对集合我们可以实现取交际.差集并集.通过这些操作我们可以实现SNS中 ...
- MySQL密码丢失,解决方法
我的MySQ安装路径是:D:\Program Files\MySQL 1.所以先cmd下切入盘 输入-> D: 输入->cd "D:\Program Files\MySQL\My ...
- 将[4,3,2,5,4,3]分割成[4,3,2]、[5,4,3]两个List的算法
将[4,3,2,5,4,3]分割成[4,3,2].[5,4,3]两个List的算法 package com.srie.test; import java.util.ArrayList; import ...
- 如何改变xls中的单元格左上角的图标
点绿色小三角的是文本型数字,是不能参与加减运算的.首先选中含有绿色小三角的单元格,右击鼠标选择,设置单元格格式, 数字选项卡,选择常规
- WinMerge文件编码设置
http://blog.sina.com.cn/s/blog_7575fab10101o0na.html 系统默认是System codepage,我们要选用Custom codepage.值得注意的 ...
- RestTemplate.getForObject返回List的时候处理方式
...... User[] users = restTemplate.getForObject(url, User[].class); ......