参数化SQL小认识

在做机房收费系统项目,编写数据连接并访问数据库时,见别人都用了带“@”字符的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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server参数化查询是一种使用参数作为查询条件的技术,可以提高查询的安全性和性能。相比于拼接SQL语句,参数化查询可以防止SQL注入攻击,并且能够重复使用已经编译好的查询计划,从而提高查询的执行效率。 在参数化查询中,可以使用参数占位符(例如@parameter)来代替具体的参数值。这样可以将参数值与查询分离,使查询具有更好的可读性和维护性。 使用参数化查询的好处之一是可以防止SQL注入攻击。当使用拼接SQL语句时,如果用户的输入未经过正确的处理和验证,恶意的用户可能会在输入中注入恶意的SQL代码,导致数据库被攻击和破坏。而使用参数化查询,参数值会被正确地转义和处理,从而保证了查询的安全性。 此外,参数化查询还可以提高查询的性能。当使用参数化查询时,数据库会对查询进行编译,并生成一个查询计划。这个查询计划可以被重复使用,避免了每次查询都需要重新编译的开销,从而提高了查询的执行效率。 总结来说,SQL Server参数化查询是一种安全、高效的查询方式,可以提高查询的安全性和性能。通过将参数值与查询分离,参数化查询可以防止SQL注入攻击,并且可以重复使用已编译好的查询计划,提高查询的执行效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值