我按下了一个按钮,从两个组合框接收文本。连接正常,组合框中的名称也是如此,但当我为任何两个有效名称运行应用程序时,我收到消息Invalid column name
。我确定列名根据我的数据库有效。
这是我的代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnProcesar.Click
sql.sqlcon.Open()
sql.sqlsentence = New SqlCommand("SELECT * FROM dbo.Univ$ WHERE Sector = " & ingSector.Text & " AND Ciudad = " & ingCiudad.Text, sql.sqlcon)
Dim adaptador As SqlDataAdapter
adaptador = New SqlDataAdapter(sql.sqlsentence)
Dim ds As New DataSet
adaptador.Fill(ds)
sql.sqlcon.Close()
dgrid.DataSource = ds.Tables(0)
End Sub
那么,我该如何解决这个问题?
答案 0 :(得分:4)
执行此操作而不是当前的操作以避免SQL注入。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnProcesar.Click
sql.sqlcon.Open()
sql.sqlsentence = New SqlCommand("SELECT * FROM dbo.Univ$ WHERE Sector=@sector AND Ciudad=@ciudad" , sql.sqlcon)
Dim adaptador As SqlDataAdapter
adaptador = New SqlDataAdapter(sql.sqlsentence)
adaptador.SelectCommand.Parameters.AddWithValue("@sector", ingSector.Text)
adaptador.SelectCommand.Parameters.AddWithValue("@ciudad", ingCiudad.Text)
Dim ds As New DataSet
adaptador.Fill(ds)
Sql.sqlcon.Close()
dgrid.DataSource = ds.Tables(0)
End Sub
答案 1 :(得分:3)
查询中的字符串文字周围没有撇号,因此数据库认为这些值应该是列名。
在值周围添加撇号可以使其工作:
sql.sqlsentence = New SqlCommand("SELECT * FROM dbo.Univ$ WHERE Sector = '" & ingSector.Text & "' AND Ciudad = '" & ingCiudad.Text & "'", sql.sqlcon)
但是,您应该真正考虑使用参数化查询来使用这些值,而不是将值连接到查询中。