600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > SqlParameter参数化查询

SqlParameter参数化查询

时间:2020-01-06 06:13:45

相关推荐

SqlParameter参数化查询

上篇博客写了关于重构代码用到的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 IntegerDim conn = GetConn()Dim cmd As SqlCommand = New SqlCommand(cmdtext, conn)Dim res As mandType = cmdtypecmd.Parameters.AddRange(paras)Tryres = cmd.ExecuteNonQuery()Catch ex As ExceptionMsgBox(ex.Message, , "数据库操作")FinallyIf conn.State = ConnectionState.Open Thenconn.Close()End IfEnd TryReturn resEnd 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 BooleanEnlogin.user_computer = System.Environment.MachineNameEnlogin.user_loginDate = DateStringEnlogin.user_loginTime = TimeOfDayDim 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 SQLHelperIf sh.ExecuteNonQueryCan(sql, CommandType.Text, paras) > 0 ThenReturn TrueElseReturn FalseEnd IfEnd Function

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。
扩展阅读