zoukankan      html  css  js  c++  java
  • 参数化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


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

     

  • 相关阅读:
    docker 安装 clickhouse单机版
    CockRoachDB简介
    Ubuntu18.04 LTS Cockroach集群搭建
    ClickHouse 的一些优化参数
    ClickHouse 概念整理
    OOM Killer机制
    win10系统下载地址
    Quartz.Net在C#中的使用
    JavaScript的undefined与null、NaN的区别
    Java Web基础回顾 —JSP
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3220223.html
Copyright © 2011-2022 走看看