none
MySQL 判斷資料是否相同 RRS feed

  • 問題

  •         Call ConnectionDatabase()
    
            Dim daCustomers As New MySqlDataAdapter
            Dim ds As New DataSet()
    
            Dim qryCustomers As String = "SELECT ip1,ip2,ip3,ip4 FROM pre_common_banned"
    
            daCustomers.SelectCommand = New MySqlCommand(qryCustomers, iNetConnection)
    
            Dim cb As MySqlCommandBuilder = New MySqlCommandBuilder(daCustomers)
    
            daCustomers.Fill(ds, "pre_common_banned")
    
            Dim dt As DataTable = ds.Tables("pre_common_banned")
    
    Try
            If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then
              txtBannedIP.Text = dt.Rows(0)("ip1") & "." & dt.Rows(0)("ip2") & "." & dt.Rows(0)("ip3") & "." & dt.Rows(0)("ip4")
            End If
    
            If txtIP_Address.Text = txtBannedIP.Text Then
              MsgBox("您的 IP Address : " & txtIP_Address.Text & " 已被永久封鎖,無法進行登錄。" & vbCrLf & "請與系統管理員聯絡。", MsgBoxStyle.Critical + MsgBoxStyle.OkOnly, AppName)
    
            Call DisconnectDatabase()
            End If
    
        Catch ex As Exception
          MsgBox(ex.ToString)
        Finally
          Call DisconnectDatabase()
        End Try       
    

    *註 : txtIP_Address.Text = 用戶 IP,   txtBannedIP.Text = 被封鎖IP位置

    假設:

     txtIP_Address.Text = "127.0.0.1"

     txtBannedIP.Text = "127.0.0.1" (數據庫讀出來)

    如果是等於數據庫 Block IP then -> Show MsgBox

    重點問題 : 當用戶 IP : 127.0.0.1 , 登入後判斷是 banned IP 時 , 要如何從數據庫讀取出來?

    2010年11月23日 上午 11:57

解答

所有回覆

  • 那請問你的 daCustomers.Fill() 是幹嘛用的 ...
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    目前籌建雲端運算學堂 (studyazure.com) 中...
    2010年11月23日 下午 12:22
    版主
  • 那請問你的 daCustomers.Fill() 是幹嘛用的 ...
    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    目前籌建雲端運算學堂 (studyazure.com) 中...


    沒用的, 我忘了把它刪掉...

    我的意思是

    如果 pre_common_banned table 裡有數個或者許多其他被 ban ip 地址

    那如何從 ip1,ip2,ip3,ip4 去自動識別 使用者 ip address 是否被 banned

    2010年11月23日 下午 02:59
  • 既然你都讀成DataTable了, 那就用DataTable.Select 就可以檢查了.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2010年11月23日 下午 02:59
    版主
  • 一般不是你這樣用,而是用 Int32 來放,所用 byte(3) 來處理,byte(0) =127, byte(3)=1

    所以數值就是 2130706433 (&H7F000001)

    所以變成

    SELECT COUNT(IP) FROM bannedTable WHERE IP=2130706433

    如果傳回值 >=1 ,就表示這個 IP 要擋掉。

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年11月23日 下午 03:05
  • 一般不是你這樣用,而是用 Int32 來放,所用 byte(3) 來處理,byte(0) =127, byte(3)=1

    所以數值就是 2130706433 (&H7F000001)

    所以變成

    SELECT COUNT(IP) FROM bannedTable WHERE IP=2130706433

    如果傳回值 >=1 ,就表示這個 IP 要擋掉。

     


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。


    先謝謝老師指教, 可是我忘了說...

    這是 Discuz 討論區數據表...因為程式與討論區連接在一起

    用戶登錄那些也一樣...

    所以pre_common_banned 裡的 ip1, ip2, ip3, ip4 不能改變喔

    2010年11月23日 下午 04:34
  • Dim qryCustomers As String = "SELECT COUNT(IP) FROM pre_common_banned WHERE ip1=127 AND ip2=0 AND ip3=0 AND ip4=1"
    
    String.Split 方法
    http://msdn.microsoft.com/zh-tw/library/system.string.split.aspx

    把IP用Split方法拆成四個,參考以上語法試試...
    2010年11月24日 上午 01:40
  • Dim qryCustomers As String = "SELECT COUNT(IP) FROM pre_common_banned WHERE ip1=127 AND ip2=0 AND ip3=0 AND ip4=1"
    
    
    String.Split 方法
    http://msdn.microsoft.com/zh-tw/library/system.string.split.aspx

    把IP用Split方法拆成四個,參考以上語法試試...


    我照老師的做法去弄...

            Split("" & txtIP_Address.Text & "", ".")
    
            Dim qryCustomers As String = "SELECT COUNT(IP) FROM pre_common_banned WHERE ip1="" AND ip2="" AND ip3="" AND ip4="";"
    

    假設 txtIP_Address.Text = "127.0.0.1"

    如果要放到 ip1 , ip2 , ip3 , ip4 裡...要怎樣去遂一對號入座

    2010年11月24日 上午 04:57
  •         Dim strIP As String = "127.0.0.1"
            Dim strSplit() As String = strIP.Split(".")
            Dim qryCustomers As String = "SELECT COUNT(*) FROM pre_common_banned WHERE ip1=" _
            & strSplit(0) & " AND ip2=" & strSplit(1) & " AND ip3=" & strSplit(2) & " AND ip4=" & strSplit(3)
            MessageBox.Show(qryCustomers)
    

    25.2.3.4.8. SelectCommand
    • 已標示為解答 Mr.Frankie 2010年11月24日 上午 07:36
    2010年11月24日 上午 05:35
  • Hi!

    您可使用 IPAddress 類別 : 提供網際網路通訊協定 (IP) 位址。

    http://msdn.microsoft.com/zh-tw/library/system.net.ipaddress.aspx

        Dim ipAddress As System.Net.IPAddress
        Dim qryCustomers = String.Empty
        If System.Net.IPAddress.TryParse(txtIP_Address.Text, ipAddress) Then
          qryCustomers = String.Format("SELECT COUNT(*) FROM pre_common_banned WHERE ip1={0} AND ip2={1} AND ip3={2} AND ip4={3} ;", ipAddress.GetAddressBytes(0), ipAddress.GetAddressBytes(1), ipAddress.GetAddressBytes(2), ipAddress.GetAddressBytes(3))
        End If
    

    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 Mr.Frankie 2010年11月24日 上午 07:36
    2010年11月24日 上午 05:49
    版主
  • 非常成功地完成, 謝謝各位老師相助^^

    2010年11月24日 上午 07:36