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 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语句为例)、cmdtypeparas,在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

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

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 22
    评论
### 回答1: SQL Server的参数化查询是一种使用参数来代替查询语句中的具体数值或字符串的查询方式。通常情况下,我们在编写查询语句时,会使用变量来表示查询条件,然后将参数与查询语句绑定,最后执行查询。 使用参数化查询的好处有以下几个方面: 1. 提高安全性:通过使用参数,可以避免SQL注入攻击。当我们使用变量传递查询条件时,即使用户输入的值恶意改变查询语句,也不能执行除查询以外的其他操作。 2. 提高性能:由于参数化查询使用了预编译的方式,所以可以减少每次查询的编译开销,提高查询性能。 3. 增强可读性:使用参数可以使查询语句更加清晰易读,增加代码的可维护性。 4. 促进代码复用:由于查询条件是通过参数传递的,所以可以实现代码的复用,减少代码冗余。 在SQL Server中,我们可以使用SqlParameter类来创建参数,并将参数添加到SqlCommand对象中。具体步骤如下: 1. 创建SqlCommand对象:使用参数化查询之前,需要创建一个包含查询语句的SqlCommand对象。 2. 创建SqlParameter对象:使用SqlParameter类的构造函数来创建参数对象,需要指定参数名、参数类型、参数值等属性。 3. 添加参数到SqlCommand对象:通过调用SqlCommand对象的Parameters属性的Add方法,将SqlParameter对象添加到SqlCommand对象中。 4. 执行查询:调用SqlCommand对象的ExecuteReader()方法来执行查询,并获取查询结果。 总之,使用SQL Server的参数化查询可以提高查询的安全性、性能、可读性和代码复用性。当我们需要对数据库进行操作时,尤其是涉及用户输入的查询条件时,建议使用参数化查询来避免潜在的安全风险。 ### 回答2: SQL Server参数化查询是指在执行SQL语句时,将参数作为独立的变量来处理,而不是将参数直接嵌入到SQL语句中。参数化查询可以提高查询的性能和安全性。 首先,参数化查询可以提高查询的性能。当使用参数化查询时,SQL Server可以缓存已编译的查询计划,然后在后续的查询中重用该计划。这样可以减少查询的编译时间,并且避免每次查询都重新编译查询语句,从而提高查询的执行效率。 其次,参数化查询可以提高查询的安全性。通过将参数作为独立的变量处理,可以避免SQL注入攻击。SQL注入是一种常见的安全漏洞,攻击者可以通过在SQL语句中插入恶意代码来执行未经授权的数据库操作。使用参数化查询可以防止攻击者通过注入恶意代码来破坏数据库或获取敏感数据,从而保护数据库的安全性。 此外,参数化查询还可以提高代码的可读性和维护性。通过将参数与SQL语句分离,可以更清晰地理解查询的逻辑和目的。当修改查询时,只需修改参数值,并不需要修改SQL语句的结构,从而减少错误和代码冗余。 总之,SQL Server参数化查询是一种提高查询性能、安全性和代码可读性的好方法。通过将参数作为独立的变量处理,可以减少查询的编译时间、防止SQL注入攻击,并提高代码的可维护性。 ### 回答3: SQL Server参数化查询是一种使用参数来代替实际值的查询方法。参数化查询可以防止SQL注入攻击,并提高查询的性能和安全性。 在SQL Server中,使用参数化查询可以通过声明和设置参数来实现。首先,我们需要声明参数,并指定参数的名称、数据类型和大小。然后,我们可以将参数绑定到查询语句中的相应位置。 参数化查询的好处之一是可以防止SQL注入攻击。SQL注入是指通过在查询语句中插入恶意代码来攻击数据库。使用参数化查询后,查询语句中的参数值是预编译的,不会被解释为可执行的代码,因此可以有效地防止SQL注入攻击。 此外,参数化查询还可以提高查询的性能。在执行查询之前,数据库服务器会对查询进行优化,并创建查询的执行计划。当使用参数化查询时,数据库服务器可以重用生成的执行计划,避免重新编译查询语句,提高查询的执行效率。 参数化查询还可以提高查询的安全性。通过参数化查询,我们可以限制查询的输入值范围,避免不必要的访问和数据泄漏。例如,我们可以在查询中使用参数来限制返回的结果数量或指定特定的条件,从而提供更加安全的查询结果。 总而言之,SQL Server参数化查询是一种有效的查询方法,可以提高查询的性能和安全性。通过声明和设置参数,我们可以防止SQL注入攻击,并优化查询的执行计划,从而提供更高效和安全的数据库查询服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值