SQL Server语言 - 简单选择查询不适用于 vb.net 而删除查询工作正常



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

此行给出错误:

dr = cmd.ExecuteReader()

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

知道出了什么问题吗?

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-PCSQLEXPRESS;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

如果名称字段是文本字段,则需要将文本框括在单引号中,但这是不明智的建议。处理这种情况的唯一好方法是通过参数化查询

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 块中

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

通过这种方式,连接在尽可能短的时间内保持打开状态,并且在异常情况下也会关闭并适当处理。

最新更新