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
返回的值。如果这不是零,那么代码就完全按照它应该的方式工作,问题是你。