2012-09-30 75 views
1

在我的项目(vb.net)中,我将一个网站的IP地址存储在一个表中,并且列表的类型为nvarchar。但我无法从表格中检索它。我不知道它是否与“点”符号有关。请帮忙。无法从sql数据库检索带点符号的数据

这是命令我使用

query = "select *from restricted_sites where site_address='" + webip + "'" 

webip是网站的IP地址。

Imports System.Data.SqlClient 
Imports System.Net 
Public Class restrict 
    Private Sub clear_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles clear_button.Click 
     site_TextBox1.Text = "" 
     addr_TextBox1.Text = "" 
    End Sub 
    Private Sub submit_button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles submit_button.Click 
     Dim connectionstr As String 
     Dim query As String 
     Dim conn As SqlConnection 
     Dim cmd As SqlCommand 
     Dim webip As String 
     Dim hostname As IPHostEntry = Dns.GetHostByName(addr_TextBox1.Text) 
     Dim ip As IPAddress() = hostname.AddressList 
     Try 
      webip = ip(0).ToString 
      connectionstr = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\URLTrack.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" 
      conn = New SqlConnection(connectionstr) 
      conn.Open() 
      query = "insert into restricted_sites values('" + site_TextBox1.Text + "','" + webip + "')" 
      cmd = New SqlCommand(query, conn) 
      cmd.ExecuteNonQuery() 
      MsgBox("Website added for restriction", MsgBoxStyle.Information) 
      conn.Close() 
     Catch ex As SqlException 
     End Try 
    End Sub 
End Class 

Private Sub Combox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Combox1.KeyPress 
     If e.KeyChar = Convert.ToChar(Keys.Enter) Then 
      Dim connectionstr As String 
      Dim query As String 
      Dim cmd As SqlCommand 
      Dim reader As SqlDataReader 
      Dim conn As SqlConnection 
      Dim url As String = "" 
      Dim webip As String 
      Dim hostname As IPHostEntry = Dns.GetHostByName(Combox1.Text) 
      Dim ip As IPAddress() = hostname.AddressList 
      webip = ip(0).ToString 
      connectionstr = "Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\URLTrack.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" 
      conn = New SqlConnection(connectionstr) 
      conn.Open() 
      query = "select * from restricted_sites where site_address='" + webip + "'" 
      cmd = New SqlCommand(query, conn) 
      reader = cmd.ExecuteReader 
      While (reader.Read()) 
       url = reader(2) 
      End While 
      reader.Close() 
      MsgBox(url, MsgBoxStyle.Information) 
      If webip <> url Then 
       AxWebBrowser1.Navigate(Combox1.Text) 
       Combox1.Text = AxWebBrowser1.LocationURL 
      Else 
       MsgBox("This Web Page is Restricted.Contact the ADMIN for Further Info", MsgBoxStyle.Critical) 
      End If 
     End If 
     If e.KeyChar = Convert.ToChar(Keys.Escape) Then 
      AxWebBrowser1.Stop() 
     End If 
    End Sub 

第二个代码是比较部。 query =“select * from restricted_sites where site_address ='”+ webip +''“ 此代码是问题所在。 这是我的代码,通过匹配存储在数据库中的IP地址来限制网站,当URL正在导航。

+5

您有一个SQL注入漏洞。 – SLaks

+0

你能帮我解决我如何摆脱SQL注入漏洞吗? –

+2

阅读维基百科。 – SLaks

回答

0

你需要把*from像这样一个空格:

query = "select * from restricted_sites where site_address='" + webip + "'" 

点符号(想必你在webip的意思),将不会是一个问题,因为它是在一个字符串

+0

谢谢苏哈尔帕特尔的回答。恐怕这样做效果不好。 –

1

您的查询语法错误。你忘记了*from之间的空间。

select *from restricted_sites 
    ^here 

应该

select * from restricted_sites 

侧面说明,因为你正在使用VBNet,请通过adonet命令做参数化查询和参数作为当前的查询是容易与SQL Injection

+0

谢谢John Woo的快速回复。我试过了,但它仍然没有检索到ip.Also thanx的建议。您能告诉我如何使用ado.net参数化查询吗? –

+0

你可以在你的桌子上包括样品记录列表吗? –

+0

我有两个字段site_name和site_address..site_name - facebook site_address 66.220.152.16 –

0

如果你正在做的是检查,如果一个IP地址字符串是在数据库中,你只需要计算该字符串的出现次数的数量:

query = "SELECT COUNT(*) FROM restricted_sites WHERE site_address = @WebIp;" 
cmd = New SqlCommand(query, conn) 
' assumes the ip address column is 15 chars ' 
cmd.Parameters.Add(New SqlParameter With {.ParameterName = "@WebIp", _ 
              .SqlDbType = SqlDbType.NVarChar, _ 
              .Size = 15, _ 
              .Value = webip}) 

conn.Open() 
Dim nFound = CInt(cmd.ExecuteScalar) 
conn.Close() 

If nFound = 0 Then 
    ' site is not in restricted list 
End If 

而且,你不应该在代码中使用SELECT *除了测试以外 - 使用列名而不是*并只检索你所需要的。

+0

Thanx为您的答复。我在浏览器上匹配用户输入的域名的IP地址,并检查它是否存在于管理员存储了阻止的站点的restricted_sites表中。 –

+0

此代码不符合我的要求。感谢您对select语句的建议。 –