【问题标题】:Cannot insert into MS Access database from VB.NET无法从 VB.NET 插入 MS Access 数据库
【发布时间】:2015-09-09 04:16:47
【问题描述】:

VB.NET 无法将数据插入到 MS Access 数据库表中。

我可以在这段代码中修改什么来将数据插入到表中?

错误信息:

System.Data.dll 中出现“System.InvalidOperationException”类型的未处理异常

附加信息:ExecuteNonQuery:连接属性尚未初始化。

Private Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click

        Dim connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=loginUser.mdb;")

        Dim dt As New DataTable
        Dim da As New OleDbDataAdapter

        Try
            connection.Open()
            Dim cmd As New OleDbCommand
            cmd.CommandText = "INSERT INTO Staff (ID, username, password) VALUES (@id, @username, @password)"
            cmd.Parameters.AddWithValue("@id", 101)
            cmd.Parameters.AddWithValue("@username", txtUsername.Text)
            cmd.Parameters.AddWithValue("@password", txtPassword.Text)

            cmd.ExecuteNonQuery()
            MsgBox("Add")
        Catch ex As Exception
        Finally
            connection.Close()
        End Try


    End Sub

【问题讨论】:

  • 发布插入失败时发生的确切错误消息可能对其他人有所帮助。
  • System.Data.dll 中出现“System.InvalidOperationException”类型的未处理异常附加信息:ExecuteNonQuery:连接属性尚未初始化。
  • 密码为保留字,需要别名或转义。请看stackoverflow.com/tags/ms-access/info

标签: sql vb.net ms-access


【解决方案1】:

您好,您需要将connection 初始化为cmd.Connection 属性,将您的以下代码更改为以下代码:

  cmd.Connection = connection
  con.Open()
  cmd.ExecuteNonQuery()

【讨论】:

    【解决方案2】:

    您在创建/执行命令时没有提及您的connection。改用下面的代码...

        Private Sub btnCreate_Click(sender As Object, e As EventArgs) Handles btnCreate.Click
    
            Dim connection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=loginUser.mdb;")
    
            Dim dt As New DataTable
            Dim da As New OleDbDataAdapter
    
            Try
                Dim cmd As New OleDbCommand("INSERT INTO Staff (ID, username, password) VALUES (@id, @username, @password)",connection)
                connection.Open()
                cmd.Parameters.AddWithValue("@id", 101)
                cmd.Parameters.AddWithValue("@username", txtUsername.Text)
                cmd.Parameters.AddWithValue("@password", txtPassword.Text)
    
                cmd.ExecuteNonQuery()
                MsgBox("Add")
            Catch ex As Exception
            Finally
                connection.Close()
            End Try
    
    
    End Sub
    

    【讨论】:

      【解决方案3】:

      异常的原因是你没有将声明的连接分配给命令对象

      因此您可以将现有的命令声明修改为

      Dim cmd As New OleDbCommand("", connection )

      Dim cmd As New OleDbCommand
      cmd.connecction = connection
      

      我刚刚修改了你的代码:见下文

      Dim dt As New DataTable
      Dim da As New OleDbDataAdapter
      Using OleDbConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=loginUser.mdb;")
                  Dim cmd As New OleDbCommand("", OleDbConn)
                  With cmd
                      OleDbConn.Open()
                      .CommandText = "INSERT INTO Staff (ID, username, password) VALUES (@id, @username, @password)"
                      .Parameters.AddWithValue("@id", 101)
                      .Parameters.AddWithValue("@username", "adfda")
                      .Parameters.AddWithValue("@password", "dfsd")
                      .ExecuteNonQuery()
                      MsgBox("Add")
                  End With
              End Using
      

      你可以使用Using块来处理你的连接,连接会在使用块结束时自动关闭

      【讨论】:

        猜你喜欢
        • 2013-12-14
        • 2021-06-25
        • 1970-01-01
        • 2015-05-17
        • 2019-08-05
        • 1970-01-01
        • 2016-09-14
        • 2017-03-05
        • 1970-01-01
        相关资源
        最近更新 更多