2012-11-22 210 views
0

我想插入一行到表我在访问。该表名为Site,它有两列,即SiteId(AutoNumber)和SiteName(Text)。出于测试目的,我一把抓起一个Excel工作表的值并试图将值与下面的代码的网站名称列...VB.NET Access DB插入不插入数据?

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim App As New Excel.Application 
    Dim WB As Excel.Workbook = App.Workbooks.Open("C:\MyFile.xlsx") 
    Dim WS As Excel.Worksheet = DirectCast(WB.Worksheets(2), Excel.Worksheet) 
    App.Visible = False 

    Dim Range As Excel.Range 
    Range = WS.Range("A8") 
    Dim cnn As New OleDbConnection(My.Settings.cnn) 
    Dim cmd As New OleDbCommand("INSERT INTO Site(SiteName) VALUES(@SiteName)", cnn) 
    cmd.Parameters.Add("@SiteName", OleDbType.Char).Value = Range.Value.ToString 

    Try 
     Using cmd.Connection 
      cmd.Connection.Open() 
      cmd.ExecuteNonQuery() 
     End Using 
    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 
End Sub 

即使我删除cmd.Parameters线,只是把直值(如'测试')它不会插入。执行命令时,代码中没有错误。为什么价值不起作用?我已经验证了从Excel工作表返回的数据,并且工作正常。我只是无法将它插入到Access中的表中。该连接工作正常,以及因为如果我用这个插入...

Dim cmd As New OleDbCommand("INSERT INTO Site VALUES(@SiteName)", cnn) 

它会告诉我该查询值的数量不匹配字段计数或类似的东西。

回答

2

值插入(至少大部分的时间);)你有没有检查过的mdb的内容(输出文件夹)手动!?

您已经添加了mdb文件到您的项目?转到文件的属性窗口并将“复制到输出目录”设置为“从不”。

通常,当您添加的文件,它被设置为“复制,如果新”或“总是复制”。这意味着,只要您运行你的应用程序在调试器从项目目录的MBD文件复制到调试/ release文件夹中,并覆盖在已内(并在您已存储在您的记录)的任何文件。

+1

胡说!这是工作。我没有意识到它正在复制到可执行文件的调试文件夹中。我正在使用源文件夹中的文件...谢谢! –