【问题标题】:Having the ExecuteNonQuery : connection property has not been initialized拥有 ExecuteNonQuery : 连接属性尚未初始化
【发布时间】:2020-07-21 14:45:49
【问题描述】:

我正在尝试从我的数据库中删除一个条目。但是当 ExecuteNonQuery 必须完成它的工作时,它找不到启用的连接并给我这个错误:

System.InvalidOperationException :'ExecuteNonQuery : 连接属性尚未初始化'

这就是我所做的:

    Dim delete As New OleDbCommand
    Dim da As OleDbDataAdapter
    Dim ds As DataSet
    Dim dt As DataTable

    initConnectionDtb(pathDtb)
    openConnection()


    If TextBox2.Text <> "" Then
        delete.CommandText = "delete FROM USERS WHERE NAME = '" & TextBox2.Text & "'"
        delete.CommandType = CommandType.Text
        delete.ExecuteNonQuery()
        MsgBox("USER HAS BEEN DELETED")
    Else
        MsgBox("ERROR")
    End If

感谢 connectionName.State,我可以检查它是否正确连接到数据库

我也在函数中彻底改写了与数据库的连接,但是即使打开了连接,ExecuteNonQuery仍然无法连接

我看到我不是这个网站上唯一的人,但以前的答案都没有帮助我。

【问题讨论】:

  • 你在哪里设置deletecommand 的Connection?
  • @FoxLeCredule 请不要向不相关的标签发送垃圾邮件 - 您的问题既不是 Oracle 也不是 MS Access 所特有的,当然也不会同时出现。
  • @Amessihel 你链接的是一个 C# 我在一个 VB 项目中
  • @Amessihel 好的,我刚开始,所以我不知道所以谢谢你的回答

标签: vb.net


【解决方案1】:

@Filburt 指出,您如何将连接分配给您的命令对象。 Here is an example:

Using connection As OleDbConnection = New OleDbConnection(connectionString)
        connection.Open()
        Dim command As OleDbCommand = New OleDbCommand(queryString, connection)
        command.ExecuteNonQuery()
    End Using

在您的代码中,您需要将连接对象分配给您的命令对象。我们看不到您在initConnectionDtb(pathDtb) 或openConnection() 中有什么代码

为了适应你的代码:

delete.Connection = <<your connection object here>>
    delete.CommandText = "delete FROM USERS WHERE NAME = '" & TextBox2.Text & "'"
    delete.CommandType = CommandType.Text
    delete.ExecuteNonQuery()

另一个注意事项:查看parameterizing your query strings 而不是手动串值。这将防止 TextBox2.Text 具有像 O'Toole 这样的值会导致语法错误以及 SQL Injection 出现问题。

【讨论】:

  • 感谢link 帮了大忙
  • @FoxLeCredule:太棒了,祝你好运。
【解决方案2】:

这是我用来初始化连接的内容:

    Public Function initConnectionDtb(ByVal path As String) As Boolean
    initConnectionDtb = True
    Connection = New OleDbConnection
    Try
        Connection.ConnectionString = "provider=microsoft.jet.oledb.4.0;" & "data source= " & path & ";"
    Catch ex As Exception
        Return False
    End Try
End Function

Public Function openConnection() As Boolean
    openConnection = True
    Try
        Connection.Open()
        MsgBox(Connection.State) 'to test if my connection really openned in my previous post
    Catch ex As Exception
        MsgBox(ex.Message)
        Return False
    End Try
End Function

Public Sub closeConnection()
    If Not IsNothing(Connection) Then
        If Connection.State = ConnectionState.Open Then
            Connection.Close()
        End If
        MsgBox(Connection.State)

        Connection.Dispose()
        Connection = Nothing
    End If
End Sub

到目前为止,它适用于我尝试的所有方法(例如,将某人添加到数据库中)

【讨论】:

    猜你喜欢
    • 2012-05-03
    • 2011-07-22
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多