Vb.net 试图通过VB表单将新记录提交到access文件[.mdb]

Vb.net 试图通过VB表单将新记录提交到access文件[.mdb],vb.net,visual-studio,Vb.net,Visual Studio,只是一个正在做项目的学生。尝试过研究,但没有运气,希望你能帮忙。 我目前为我希望输入的表单编写的代码如下 Imports System.Data.OleDb Public Class frmPlayerInput Dim Provider As String Dim dataFile As String Dim connString As String Dim myConnection As OleDbConnection = New OleDbConnect

只是一个正在做项目的学生。尝试过研究,但没有运气,希望你能帮忙。 我目前为我希望输入的表单编写的代码如下

Imports System.Data.OleDb

Public Class frmPlayerInput

    Dim Provider As String
    Dim dataFile As String
    Dim connString As String
    Dim myConnection As OleDbConnection = New OleDbConnection

    Private Sub btnHome_Click(sender As Object, e As EventArgs) Handles btnHome.Click
        frmHome.Show()
        Me.Hide()
    End Sub

    Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
        Provider = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="
        dataFile = "Z:\Desktop\players.mdb"
        connString = Provider & dataFile
        myConnection.ConnectionString = connString
        myConnection.Open()
        Dim str As String
        str = "Insert into Items ([FirstName].[Surname].[TopNumber]) Values (?,?,?)"
        Dim cmd As OleDbCommand = New OleDbCommand(str, myConnection)
        cmd.Parameters.Add(New OleDbParameter("FirstName", CType(txtFirstName.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("Surname", CType(txtSurname.Text, String)))
        cmd.Parameters.Add(New OleDbParameter("TopNumber", CType(txtTopNumber.Text, String)))

        Try
            cmd.ExecuteNonQuery()
            cmd.Dispose()
            myConnection.Close()
            txtFirstName.Clear()
            txtSurname.Clear()
            txtTopNumber.Clear()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnClear.Click, btnHome.Click
        txtFirstName.Clear()
        txtSurname.Clear()
        txtTopNumber.Clear()
    End Sub

End Class
错误消息:System.InvalidOperationException:'不允许 更改“ConnectionString”属性。连接的当前状态 门开着。”

发生这种情况的原因是,如果引发异常,您正在打开连接,但没有关闭连接。这就是为什么要在本地创建、使用和销毁此类对象的示例。使用连接对象的最正确方法如下:

Using connection As New OleDbConnection(connectionString)
    'Use connection here.
End Using
这将每次创建一个新的连接对象,这是首选选项。它是一个轻量级对象,实际的数据库连接处于较低级别。
Using
块还保证连接将被关闭,即使在块内抛出未处理的异常

表单中打开的另一个错误是:查询值的数量 和目标字段不相同


发生这种情况是因为,正如我所说,你在应该使用逗号的地方使用了点<代码>[FirstName].[LANSAME].[TopNumber]被解释为一列,其中包含符合条件的表和架构,而不是三列。

请提供问题的完整和清晰解释。您粗略地解释了您试图实现的目标,并提供了相关的代码,但是您已经解释了代码的预期行为和实际行为以及它们之间的区别。如果抛出异常,那么您需要提供该异常的详细信息。也就是说,您的SQL代码看起来很可疑。当列名应该是逗号时,您已经用点分隔了列名。点用于分隔相同名称的部分,例如Database.Schema.Table.Column,就像它们在VB中一样。顺便说一下,使用
CType
Text
属性转换为type
String
,当它们已经是type
String
时,有什么意义呢?我还建议,您隐藏和显示表单的方式是个坏主意。最有可能的是,玩家输入表单应该在主表单上显示为一个模式对话。感谢您的回复,我的代码来自于我能找到的任何在线教程。这是我第一次使用VB。我现在的主要目标是能够使用文本框中的文本在access表中创建一条记录。