SQL Query中的列名异常无效 - VB.Net

时间:2014-07-02 23:38:07

标签: sql sql-server vb.net

我按下了一个按钮,从两个组合框接收文本。连接正常,组合框中的名称也是如此,但当我为任何两个有效名称运行应用程序时,我收到消息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

那么,我该如何解决这个问题?

2 个答案:

答案 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)

但是,您应该真正考虑使用参数化查询来使用这些值,而不是将值连接到查询中。