上篇博客写了关于重构代码用到的SQLHelper类,这个类包括四种函数,根据是否含参和是否有返回值各分两种。在这里写写传参过程用到的SqlParameter。

如果我们使用如下拼接sql字符串的方式进行数据库操作存在脚本注入的危险:

        Dim sql As String = "insert into T_Loginlog(userID,loginDate,loginTime,computer)values('" + Enloginlog.user_userID + "','" & Enloginlog.user_loginDate & "','" & Enloginlog.user_loginTime & "','" & Enloginlog.user_computer & "')"

为了防止SQL注入,我们采用参数化查询的方式。执行带参数的sql增删改语句或存储过程的函数如下:

 ''' <summary>
''' 执行带参数的sql增删改语句或存储过程
''' </summary>
''' <param name="cmdtext">增删改语句或存储过程</param>
''' <param name="cmdtype">命令类型文本或存储过程</param>
''' <param name="paras">参数数组</param>
''' <returns>受影响的行数</returns>
''' <remarks></remarks>
Public Function ExecuteNonQueryCan(ByVal cmdtext As String, ByVal cmdtype As CommandType, ByVal paras As SqlParameter()) As Integer
Dim conn = GetConn()
Dim cmd As SqlCommand = New SqlCommand(cmdtext, conn)
Dim res As Integer
cmd.CommandType = cmdtype
cmd.Parameters.AddRange(paras)
Try
res = cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message, , "数据库操作")
Finally
If conn.State = ConnectionState.Open Then
conn.Close()
End If
End Try
Return res End Function

在这里定义了cmdtext(以sql语句为例)、cmdtype和paras,在DAL层调用sqlhelper时,只需传入相应的参数即可。其中,paras参数部分构成如下:

 ''' <summary>
''' 定义一个函数在用户输入用户名密码正确并登录时将登录信息记录到T_Login正在值班教师表中
''' </summary>
''' <param name="Enlogin">T_Login表所对应的实体</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function InsertIntoTLogin(ByVal Enlogin As Entity.EnLogin) As Boolean Enlogin.user_computer = System.Environment.MachineName
Enlogin.user_loginDate = DateString
Enlogin.user_loginTime = TimeOfDay Dim sql As String = "insert into T_Login(userID,loginDate,loginTime,computer)values(@userID,@loginDate,@loginTime,@computer)"
Dim paras As SqlParameter() = {New SqlParameter("@userID", Enlogin.user_userID),
New SqlParameter("@loginDate", Enlogin.user_loginDate),
New SqlParameter("@loginTime", Enlogin.user_loginTime),
New SqlParameter("@computer", Enlogin.user_computer)} Dim sh As SQLHelper = New SQLHelper
If sh.ExecuteNonQueryCan(sql, CommandType.Text, paras) > 0 Then
Return True
Else
Return False
End If End Function

说到底还是封装的思想,我们将可能输入有误的地方以参数的形式固定下来,通过传参很好的解决了这个问题。

SqlParameter参数化查询的更多相关文章

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

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

  2. Sql Server参数化查询之where in和like实现详解

    where in 的参数化查询实现 首先说一下我们常用的办法,直接拼SQL实现,一般情况下都能满足需要 string userIds = "1,2,3,4"; using (Sql ...

  3. 【转】浅析Sql Server参数化查询

    转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/21/2460978.html 错误认识1.不需要防止sql注入的地方无需参数化 参数化查询就 ...

  4. 【转】Sql Server参数化查询之where in和like实现之xml和DataTable传参

    转载至: http://www.cnblogs.com/lzrabbit/archive/2012/04/29/2475427.html 在上一篇Sql Server参数化查询之where in和li ...

  5. 【转】Sql Server参数化查询之where in和like实现详解

    转载至:http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html 文章导读 拼SQL实现where in查询 使用CHARINDE ...

  6. SQL 参数化查询 应用于 Like

    在sql 进行参数化查询的时候,使用like 语句和参数的时候,错误的写法:  Participant like '%@Participant%' ,这样在数据库为解析为 '%'participant ...

  7. 023. Asp.net参数化查询预防Sql注入攻击

    /// <summary> /// 参数化查询预防SQL注入式攻击 /// </summary> public int checkLogin(string loginName, ...

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

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

  9. ADO.net参数化查询陷阱

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

随机推荐

  1. GCC -Wall

    官网:http://gcc.gnu.org/onlinedocs/gcc-4.7.2/gcc/Warning-Options.html#Warning-Options3.8 Options to Re ...

  2. spring aop 笔记2

    Aop面向切面编程 切面(Aspect): 一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是J2EE应用中一个关于横切关 注点的很好的例子.在Spring AOP中,切面可以使用基于模式) ...

  3. cmake 学习笔记(四)

    接前面的一二三,学习一下 CMakeCache.txt 相关的东西. CMakeCache.txt 可以将其想象成一个配置文件(在Unix环境下,我们可以认为它等价于传递给configure的参数). ...

  4. MFC自绘控件学习总结第二贴---转

    首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/2011071 ...

  5. Asp.Netserver控件开发的Grid实现(三)列编辑器

    以下是GridColumnsEditor的实现代码: GridColumnsEditor.cs using System; using System.Collections.Generic; usin ...

  6. linux下编码和vim编码问题解决

    Linux下编码问题 在Linux环境下经常会出现文件乱码的问题,这实际上就是因为文件编码,以Ubuntu为例,默认的字符编码为UTF-8,并且没有默认安装gbk和gb2312,所以需要我们进行安装和 ...

  7. [Swust OJ 352]--合并果子(贪心+队列模拟)

    题目链接:http://acm.swust.edu.cn/problem/352/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  8. HDU 3068 最长回文 【最长回文子串】

    和上一题一样,不过这题只是要求最长回文子串的长度 在此采用了非常好用的Manacher算法 据说还是O(n) 的效率QAQ 详细用法参考了上篇博客的参考资料,这两天有空学习一下~ Source cod ...

  9. POJ 1830 【高斯消元第一题】

    首先...使用abs()等数学函数的时候,浮点数用#include<cmath>,其它用#include<cstdlib>. 概念: [矩阵的秩] 在线性代数中,一个矩阵A的列 ...

  10. linux下find命令-atime,-ctime,-mtime真正含义

    linux下的-atime,-ctime,-mtime含义我们经常会在论坛或者群里面被问到,在linux或者unix下如何查看某文件的创建日期?经常又会有人说用find命令加选项-ctime,其实这里 ...