我正在尝试在Access中的表中插入一行。该表名为Site,它有两列,SiteId(AutoNumber)和SiteName(Text)。出于测试目的,我从Excel工作表中获取了一个值,并尝试使用以下代码将值插入SiteName列...
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行并只是放置一个像值('Test')这样的直值,它也不会插入。我执行命令时代码中没有错误。为什么价值不起作用?我已经验证了从Excel工作表返回的数据,并且工作正常。我只是无法将其插入Access中的表中。连接工作正常,因为如果我使用此插入...
Dim cmd As New OleDbCommand("INSERT INTO Site VALUES(@SiteName)", cnn)
它会告诉我查询值的数量与字段数或类似的东西不匹配。
答案 0 :(得分:2)
插入值(至少大部分时间);)您是否曾手动检查过mdb的内容(在输出文件夹中!)?
您已将mdb文件添加到项目中?转到文件的属性窗口,将“复制到输出目录”设置为“从不”。
NORMALLY当您添加文件时,它被设置为“如果更新则复制”或“始终复制”。这意味着无论何时在调试器中运行应用程序,项目目录中的mbd文件都会复制到调试/发布文件夹,并覆盖已经存在的任何文件(以及存储记录的位置)。