0

我正在尝试在 Access 中的表中插入一行。该表名为 Site,它有两列,SiteId(自动编号)和 SiteName(文本)。出于测试目的,我从 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 行并且只输入了一个像 Values('Test') 这样的直接值,它也不会插入。执行命令时,代码中没有错误。为什么价值不起作用?我已经验证了从 Excel 工作表返回的数据,并且工作正常。我只是无法将其插入 Access 中的表中。连接也可以正常工作,因为如果我使用此插入...

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

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

4

1 回答 1

2

值被插入(至少在大多数情况下);)您是否曾经手动检查过 mdb 的内容(在输出文件夹中!)?

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

通常,当您添加文件时,它设置为“如果较新则复制”或“始终复制”。这意味着每当您在调试器中运行您的应用程序时,项目目录中的 mbd 文件都会被复制到调试/发布文件夹并覆盖其中已经存在的任何文件(以及您存储记录的位置)。

于 2012-11-22T15:10:33.597 回答