简单的选择查询不能与vb.net一起使用,而删除查询工作正常

时间:2014-04-06 14:00:30

标签: sql-server vb.net

我正在通过vb.net应用程序编写一个简单的SQL Server查询操作。我有一些奇怪的问题。

这一行给出错误:

dr = cmd.ExecuteReader()

这给了我错误"无效的列名abhishek 。"此处abhishek是我在TextBox1.Text中提供的数据。我无法想到我身边的任何错误,因为这是一个简单的查询。我能够以不同的形式在同一个表上运行其他查询,比如删除查询,因此它不是数据库问题。

有任何疑问是什么?

reginfo是表名。 name是其中一个字段。

我的完整代码如下:

Imports System.Data.Sql
Imports System.Data.SqlClient
Public Class Form9
    Dim con As New SqlConnection()
    Dim cmd As New SqlCommand()

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        cmd.CommandText = "select * from reginfo where name=" + (TextBox1.Text) + ""
        Dim dr As SqlDataReader
        con.Open()
        cmd.Connection = con
        dr = cmd.ExecuteReader()    '<<< This line is creating problem
        If dr.Read() Then
            TextBox2.Text = dr(0).ToString()
        End If
        con.Close()
    End Sub

    Private Sub Form8_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        con.ConnectionString = "Data Source=ABHISHEK-PC\SQLEXPRESS;Initial Catalog=locserver;Integrated Security=True;Pooling=False"
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

    End Sub

End Class

1 个答案:

答案 0 :(得分:2)

如果名称字段是文本字段,那么您需要将文本框用单引号括起来,但这是一个不好的建议。对这种情况唯一有效的方法是通过参数化查询

cmd.CommandText = "select * from reginfo where name=@name"
cmd.Parameters.AddWithValue("@name",  TextBox1.Text)
Dim dr As SqlDataReader
con.Open()
cmd.Connection = con
dr = cmd.ExecuteReader() 

此外,不要将全局对象保留为连接或命令。尽可能晚地实例化连接并尽快关闭它总是一个好习惯,更好地在使用块中

Using con = New SqlConnection(...connection string here....)
    Using cmd = New SqlCommand("select * from reginfo where name=@name", con)
        con.Open()
        cmd.Parameters.AddWithValue("@name",  TextBox1.Text)
        Using dr = cmd.ExecuteReader
            '.... do you reading
        End Using
    End Using

End Using

通过这种方式,连接可以在最短的时间内保持打开状态,并且在例外的情况下关闭并妥善处理。