參數化SQL小認識

來源:互聯網
上載者:User

    在做機房收費系統項目,編寫資料連線並訪問資料庫時,見別人都用了帶“@”字元的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


       以前,對學習新的知識總是帶有一種恐懼感,總覺得自己不能把它們弄明白。看到別人在做項目的時候,用到了很多自己不會的知識,就覺得很有壓力,其實換一種心態去想,這正是給你提供了一個提升自我的機會,誰不是從不會走過來的!

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.