Vb.net 无法插入到MS Access数据库中

Vb.net 无法插入到MS Access数据库中,vb.net,ms-access,Vb.net,Ms Access,我试图使用登录表单将数据插入数据库,但代码似乎不起作用。没有发生错误,只是在运行代码时看起来什么都没有发生 代码: 我不确定您正在使用连接字符串尝试什么,但您不需要此部分: ;_Name=;_Surname=;_Username=;_Password=; 取而代之的是删除上述内容: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb; 有关连接字符串的更多信息,请参阅

我试图使用登录表单将数据插入数据库,但代码似乎不起作用。没有发生错误,只是在运行代码时看起来什么都没有发生

代码:


我不确定您正在使用连接字符串尝试什么,但您不需要此部分:

;_Name=;_Surname=;_Username=;_Password=;
取而代之的是删除上述内容:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb;
有关连接字符串的更多信息,请参阅

如所述,考虑检查返回的值以查看行是否已插入。

对于MS Access,参数的顺序很重要,而不是名称。使用参数时,我在SQL命令中使用了
占位符。我还指定了数据类型,所以使用构造函数来考虑。在我的示例中,我使用了
VarChar
,您可能希望对其进行相应的更改

<>我也会考虑实施:

托管资源由.NET Framework垃圾收集器(GC)处理,无需您进行任何额外编码。托管资源不需要使用块。但是,您仍然可以使用Using块强制处置托管资源,而不是等待垃圾收集器

您的代码看起来与此类似:

Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb;"),
      cmd As New OleDbCommand("INSERT INTO Users (_Name, _Surname, _Password, _Username) VALUES (?, ?, ?, ?)", con)

    con.Open()

    cmd.Parameters.Add(New OleDbParameter("@Name", OleDbType.VarChar)).Value = txtName.Text
    cmd.Parameters.Add(New OleDbParameter("@Surname", OleDbType.VarChar)).Value = txtSurname.Text
    cmd.Parameters.Add(New OleDbParameter("@Username", OleDbType.VarChar)).Value = txtUsername.Text
    cmd.Parameters.Add(New OleDbParameter("@Password", OleDbType.VarChar)).Value = txtPassword.Text

    Dim rowsAffected As Integer = cmd.ExecuteNonQuery()

    If rowsAffected = 1 Then
        MessageBox.Show("Sign In Complete")
    End If
End Using
如您所见,总体而言,代码更整洁,更易于阅读。我希望这有助于解决你的问题


这超出了这个问题的范围,但我也会研究加密密码。将它们存储为纯文本是不好的做法。看看这个所谓的问题,这可能会让您了解如何最好地执行此操作。

我不确定您正在使用连接字符串尝试什么,但您不需要此部分:

;_Name=;_Surname=;_Username=;_Password=;
取而代之的是删除上述内容:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb;
有关连接字符串的更多信息,请参阅

如所述,考虑检查返回的值以查看行是否已插入。

对于MS Access,参数的顺序很重要,而不是名称。使用参数时,我在SQL命令中使用了
占位符。我还指定了数据类型,所以使用构造函数来考虑。在我的示例中,我使用了
VarChar
,您可能希望对其进行相应的更改

<>我也会考虑实施:

托管资源由.NET Framework垃圾收集器(GC)处理,无需您进行任何额外编码。托管资源不需要使用块。但是,您仍然可以使用Using块强制处置托管资源,而不是等待垃圾收集器

您的代码看起来与此类似:

Using con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\Dentist Pat 2\Dentist Pat 2\Users.accdb;"),
      cmd As New OleDbCommand("INSERT INTO Users (_Name, _Surname, _Password, _Username) VALUES (?, ?, ?, ?)", con)

    con.Open()

    cmd.Parameters.Add(New OleDbParameter("@Name", OleDbType.VarChar)).Value = txtName.Text
    cmd.Parameters.Add(New OleDbParameter("@Surname", OleDbType.VarChar)).Value = txtSurname.Text
    cmd.Parameters.Add(New OleDbParameter("@Username", OleDbType.VarChar)).Value = txtUsername.Text
    cmd.Parameters.Add(New OleDbParameter("@Password", OleDbType.VarChar)).Value = txtPassword.Text

    Dim rowsAffected As Integer = cmd.ExecuteNonQuery()

    If rowsAffected = 1 Then
        MessageBox.Show("Sign In Complete")
    End If
End Using
如您所见,总体而言,代码更整洁,更易于阅读。我希望这有助于解决你的问题


这超出了这个问题的范围,但我也会研究加密密码。将它们存储为纯文本是不好的做法。看看这个所谓的问题,这可能会给你一些关于如何最好地做到这一点的想法。

说什么都没有发生是绝对错误的。总会有事情发生。你所寻找的没有发生并不意味着什么都没有发生。首先要测试的是
ExecuteNonQuery
返回的值。如果这不是零,那么代码就完全按照它应该的方式工作,问题是你。说什么都没有发生是绝对错误的。总会有事情发生。你所寻找的没有发生并不意味着什么都没有发生。首先要测试的是
ExecuteNonQuery
返回的值。如果这不是零,那么代码就完全按照它应该的方式工作,问题是你。