1

私のプロジェクト (vb.net) では、Web サイトの IP アドレスを type の列を持つテーブルに保存しますnvarchar。しかし、テーブルからそれを取得することはできません。「ドット」記号に問題があるのだろうか。助けてください。

これは私が使用するコマンドです

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

webipWeb サイトの 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

2 番目のコードは比較部分です。query = "select * from limited_sites where site_address='" + webip + "'" このコードが問題です。これは、URL がナビゲートされているときに、データベースに保存されている IP アドレスとの一致によって Web サイトを制限するための私のコードです。

4

3 に答える 3

1

クエリに構文エラーがあります。*との間のスペースを忘れましたfrom

select *from restricted_sites
       ^ here

そのはず

select * from restricted_sites

VBNet を使用しているadonet ため、現在のクエリはSQL Injection.

于 2012-09-30T14:44:57.813 に答える
0

*などの間にスペースを入れる必要がありますfrom

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

ドット記号 (おそらく webip で意味していたもの) は文字列にあるため問題になりません。

于 2012-09-30T14:44:33.010 に答える
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 *テスト以外のコードでは使用しないでください。* の代わりに列名を使用し、必要なものだけを取得してください。

于 2012-09-30T16:24:43.940 に答える