案例1:我无法将数据插入我的数据库
Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\ProjectVB.accdb")
案例2:我可以将数据插入我的数据库
Dim conn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Admin\Documents\ProjectVB.accdb")
数据库已保存在我的项目中
conn.Open()
cmd.Connection = conn
cmd.Parameters.AddWithValue("@ac_ID", txtID.Text)
cmd.Parameters.AddWithValue("@ac_pass", txtPassword.Text)
cmd.Parameters.AddWithValue("@nation_ID", txtNoID.Text)
cmd.Parameters.AddWithValue("@fName", txtFirstName.Text)
cmd.Parameters.AddWithValue("@lName", txtLastName.Text)
cmd.Parameters.AddWithValue("@tel", txtTel.Text)
cmd.Parameters.AddWithValue("@province", cbNation.SelectedItem)
cmd.Parameters.AddWithValue("@regOn", dtRegOn.Text)
cmd.Parameters.AddWithValue("@status", txtStatus.Text)
cmd.Parameters.AddWithValue("@gender", cbGender.SelectedItem)
cmd.Parameters.AddWithValue("@location", txtLocation.Text)
cmd.Parameters.AddWithValue("@img", imgBuffer)
cmd.Parameters.AddWithValue("@rank", cbRank.SelectedItem)
cmd.CommandText = "INSERT INTO db_KJ_Profile VALUES(@ac_ID,@ac_pass,@nation_ID,@fName,@lName,@tel,@province,@regOn,@status,@gender,@location,@img,@rank)"
cmd.ExecuteNonQuery()
答案 0 :(得分:2)
对于DataDirectory替换字符串,您应该检查文件夹PROJECTFOLDER\BIN\DEBUG
(或同一路径的x86版本)中数据库的内容。
这是因为在WinForms应用程序中,当在VS的调试会话中运行时,DataDirectory
指向执行应用程序的文件夹(BIN \ DEBUG或BIN \ x86 \ DEBUG)项目文件夹的子文件夹)。
这很容易被忽视,而且一直是混乱的根源
如果你的项目项目中列出了ACCDB文件,那就更糟了。在这种情况下,数据库项具有名为Copy To The Output Directory
的属性。您应该检查是否设置为Copy If Newer or Copy Never
而不是Copy Always
,因为在这种情况下,每次重新启动调试会话时,都会复制数据库的新副本(当然没有刚刚插入的数据)你的项目文件夹到BIN \ DEBUG文件夹