错误消息" ExecuteNonQuery需要一个开放且可用的连接。连接的当前状态已关闭"

时间:2017-02-27 07:27:37

标签: vb.net

据我记得,我从这里的教程中得到的代码有效http://www.sourcecodester.com/tutorials/visual-basic-net/7258/adding-and-saving-records-access-database-using-vbnet.html

但现在我不知道为什么我继续犯这个错误,但我已经打开了连接。我尝试在btnSave_Click事件中包含cn.Open(),但我得到了错误Microsoft.ACE.OLEDB.12.0'提供程序未在本地计算机上注册。我尝试安装此驱动程序https://download.microsoft.com/download/2/4/3/24375141-E08D-4803-AB0E-10F2E3A07AAA/AccessDatabaseEngine.exe仍然没用。

Imports System.Data.OleDb
Public Class Form1
    Public cn As New OleDb.OleDbConnection
    Public cm As New OleDb.OleDbCommand
    Public dr As OleDbDataReader
Public Sub connection()
    cn = New OleDb.OleDbConnection
    With cn
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=C:\Users\Joshua\Desktop\New folder\ProgramDraft4\Database6.accdb"
        .Open()
    End With
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Call connection()
End Sub

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
    Try
        cm = New OleDb.OleDbCommand
        With cm
            .Connection = cn
            .CommandType = CommandType.Text
            .CommandText = "INSERT INTO ID (ID) VALUES (@ID)"
            .Parameters.Add(New System.Data.OleDb.OleDbParameter("@ID", System.Data.OleDb.OleDbType.VarChar, 255, Me.txt1.Text))

            cm.Parameters("@ID").Value = Me.txt1.Text


            cm.ExecuteNonQuery()
            MsgBox("Record saved.", MsgBoxStyle.Information)
            Me.txt1.Text = ""
            Exit Sub
        End With
    Catch ex As Exception
        MsgBox(ex.Message, MsgBoxStyle.Critical)

    End Try
End Sub
End Class

1 个答案:

答案 0 :(得分:0)

第一条错误消息明确指出您需要打开连接,因此显然您需要打开连接。实际打开连接时获得的第二条错误消息是非常常见的。如果用户没有安装Microsoft Office,则需要安装独立的ACE引擎。

最大的错误是安装32位版本的Office或ACE(首选),然后以64位进程运行应用程序。在这种情况下,您的应用无法看到ACE引擎,因此它会将其报告为未安装。进入项目的属性并确保目标平台设置为x86,这将确保它在所有系统上以32位进程运行。

编辑:

仔细观察后,我发现你弄乱了你的连接字符串。您已将提供商指定为Microsoft.Jet.OLEDB.12.0,但该提供商并不存在。如果您正在使用MDB文件,则可以指定Microsoft.Jet.OLEDB.4.0并使用Windows附带的Jet引擎。如果您正在使用ACCDB文件,则必须指定Microsoft.ACE.OLEDB.12.0并确保ACE引擎作为Office或独立版的一部分安装。