在做机房收费系统项目,编写数据连接并访问数据库时,见别人都用了带“@”字符的SQL语句,就很好奇为什么都用这个语句呢?直接拼写SQL语句不是更加方便吗?带着这个问题上网查资料,才知道原来他们用的是参数化SQL,那么为什么要用参数化SQL?什么是参数化SQL呢?

在做第一次机房收费系统的时候,大部分的应该都是使用直接拼SQL语句的方法,那时候就听前辈们有说到SQL注入,那时候也不要求了解,只需要知道就行。

1.直接拼SQL:

就像大家在做第一次机房收费系统的时候所了解到的一样,直接拼写SQL很容易带来SQL注入攻击,但是因为直接拼写不用添加SqlParameter,所以会减少很少的代码。因此,这种方法也会把你直接编写的命令直接发到数据服务器上直接执行。

2.参数化SQL:

所谓的“参数化SQL”就是在应用程序设置SqlCommand.CommandText的时候使用参数(如:param1),然后通过SqlCommand.Parameters.Add来设置这些参数的值。这种做法会把你准备好的命令通过sp_executesql系统存储过程来执行,使用参数化,最直接的好处就是防止SQL注入。也就是说使用这种方法,主要是为了保证数据库的安全

参数化SQL原理:

在使用参数化查询的情况下,数据服务器不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令之后,才套用参数执行,因此就算参数中含有有损的指令,也不会被数据库执行。

下面只是自己在做机房收费系统项目的时候,用到参数化查询的一个小例子:

Public Class SqlStuBasicInfo : Implements IStuBasicInfo

    Dim strConnstr As String = System.Configuration.ConfigurationSettings.AppSettings("connstr")  '通过反射获取数据连接
Dim conn As SqlConnection = New SqlConnection(strConnstr) '实例化Connection对象
''' <summary>
''' 判断卡号是否存在
''' </summary>
''' <param name="Icard"></param>
''' <returns>返回实体层</returns>
''' <remarks></remarks> Public Function CheckcardNO(Icard As StuBasicInfo) As Enity.StuBasicInfo Implements IStuBasicInfo.CheckcardNO Dim sql As String = "select * from T_STUBASICINFO Where CardNo=@CardNo"
Dim params As SqlParameter() params = {New SqlParameter("CardNo", Icard.CardNo)} Dim cmd As SqlCommand = New SqlCommand(sql, conn)
cmd.Parameters.AddRange(params) Dim reader As SqlDataReader
Try
conn.Open()
reader = cmd.ExecuteReader
reader.Read()
Icard.CardNo = Trim(reader.Item("CardNo"))
Return Icard Catch ex As Exception Icard.CardNo = ""
Return Icard End Try End Function

以前,对学习新的知识总是带有一种恐惧感,总觉得自己不能把它们弄明白。看到别人在做项目的时候,用到了很多自己不会的知识,就觉得很有压力,其实换一种心态去想,这正是给你提供了一个提升自我的机会,谁不是从不会走过来的!

最新文章

  1. Excel——OFFSET函数
  2. python3使用requests登录人人影视网站
  3. Nginx - Windows下Nginx基本安装和配置
  4. python堡垒机
  5. Unity3d 接入 移动MM支付SDK(2.3) 全攻略
  6. js 转化类似这样的时间( /Date(1389060261000)/)问题
  7. Truck History
  8. 在web网页中正确使用图片格式
  9. c语言-转义序列
  10. jvm内存模型的理解
  11. java的&lt;&lt;左移,&gt;&gt;右移,&gt;&gt;&gt;无符号右移
  12. Fiddler实现手机抓包——小白入门
  13. 流式大数据计算实践(1)----Hadoop单机模式
  14. javascript:正则表达式、一个表单验证的例子
  15. Dynamic CRM 2016 的备份/恢复/重新部署
  16. EF生成实体自动添加数据库字段注释
  17. JS参数转发
  18. DevExpress添加Winform窗体到DockPanel
  19. AI落地企业业务的一些问题
  20. Maven实战--- dependencies与dependencyManagement的区别

热门文章

  1. Qt 5.4正式发布!引入WP,支持HTML5混合开发
  2. xhtml规范
  3. ado.net数据库操作(1)
  4. silverlight visifire控件图表制作——silverlight 后台方法页面事件
  5. POJ 1002 - 487-3279 STL
  6. hdu4006 优先队列
  7. Shell脚本中单引号(‘)和双引号(“)的使用区别[转载]
  8. sqlite编译
  9. akoj-1048-求某一整数序列的全排列问题
  10. #ifdef __OBJC__ 宏定义的作用