【问题标题】:What is wrong with this OleDbReader?这个 OleDbReader 有什么问题?
【发布时间】:2015-09-23 18:14:09
【问题描述】:

在 VB 中工作,我正在连接到一个访问数据库,并且需要从表中获取一个值。

    user = Environment.UserName
    command.CommandText = "SELECT 'nid', 'UserName' FROM qryUSERJOBS WHERE UserName = " & user
    command.Connection = connect
    Using reader As OleDbDataReader = command.ExecuteReader()
        While reader.Read()
            record = reader("nid").ToString
        End While
    End Using

当我的代码进入Using 语句时,会创建阅读器,并且我的win 表单会立即显示,而无需读取数据库或点击包含它的例程的End Sub。有什么想法吗?

【问题讨论】:

  • 将您的代码包装在 Try...catch 块中,并在其中设置断点。我认为您的用户变量周围缺少单引号。
  • 你还没有打开你的连接,是吗?始终使用参数化查询而不是字符串连接来防止 sql 注入和其他问题。
  • 不要运行OnLoad中的代码(或调用方法),将其移动到(或调用)OnShown中的方法。
  • 连接是在代码的前面部分打开的。我把它放在 try...catch 中,实际上收到了一个更改错误。杰里米,你是对的,我缺少用户变量周围的单引号。谢谢大家的回复
  • 使用Parameters可以避免不匹配的报价

标签: sql vb.net ms-access datareader oledbdatareader


【解决方案1】:
  • 使用参数化查询
  • 避免sql注入
  • 避免这样的引用错误
  • 利用一次性物品

Using connect As New OleDbConnection(connectionString)
    connect.Open()
    Using command As New SqlCommand(
    "SELECT nid, UserName FROM qryUSERJOBS WHERE UserName = @user", 
    connect)
        user = Environment.UserName
        command.Parameters.Add(New OleDbParameter("@user", user))

        Using reader As OleDbDataReader = command.ExecuteReader()
            While reader.Read()
                record = reader("nid").ToString
            End While
        End Using

    End Using
End Using

【讨论】:

    【解决方案2】:

    将代码放入 Try...Catch 块后,我的参数出现错误。我需要在 user 变量周围加上单引号。

    代码修复:

        user = Environment.UserName
        command.CommandText = "SELECT nid, UserName FROM qryUSERJOBS WHERE UserName = '" & user & "'"
        command.Connection = connect
        connect.Open()
        Try
            Using reader As OleDbDataReader = command.ExecuteReader()
                While reader.Read()
                    record = reader("nid").ToString
                End While
            End Using
        Catch ex As Exception
    
        End Try
    

    感谢大家的帮助和建议!

    【讨论】:

    • 我希望这不是生产代码,因为您应该使用参数xkcd.com/327
    • 这是我第一次使用 SQL,直到昨天才知道参数是什么,当前使用的代码类似于帖子中接受的答案。
    猜你喜欢
    • 2012-05-26
    • 2021-08-20
    • 2021-02-27
    • 2012-03-10
    • 2010-11-01
    • 2011-08-26
    • 2020-04-16
    • 1970-01-01
    • 2016-06-28
    相关资源
    最近更新 更多