无法将数据插入数据库ms-access vb

时间:2014-01-17 11:23:04

标签: vb.net

案例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()

1 个答案:

答案 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文件夹