Vb.net oledbdataadapter命令生成器getupdate,需要参数键

Vb.net oledbdataadapter命令生成器getupdate,需要参数键,vb.net,winforms,datagridview,refresh,oledbdataadapter,Vb.net,Winforms,Datagridview,Refresh,Oledbdataadapter,我好像有点问题。我有一个数据集(excel),它源于windows窗体应用程序中的datagridview。我希望找到一种方法,在对单元格进行更改后,在datagridview中刷新/更新我的dataset 让我来看看我为实现这一目标所采取的步骤。我在表单中添加了一个“刷新”按钮,并创建了一个名为write2DGV的方法,该方法将在datagridview中进行更改后,将更改写入数据集 我添加了一个计时器,允许Excel更新以更新输出。我还添加了代码来擦除我的数据集(这是datagridview

我好像有点问题。我有一个
数据集
(excel),它源于windows窗体应用程序中的
datagridview
。我希望找到一种方法,在对单元格进行更改后,在
datagridview
中刷新/更新我的
dataset

让我来看看我为实现这一目标所采取的步骤。我在表单中添加了一个“刷新”
按钮
,并创建了一个名为
write2DGV
的方法,该方法将在
datagridview
中进行更改后,将更改写入
数据集

我添加了一个计时器,允许Excel更新以更新输出。我还添加了代码来擦除我的
数据集
(这是
datagridview
的数据源)。最后,我有一个检索方法,它将通过
oledataadapter
dataset
源代码发送到
datagridview

不幸的是,当我运行代码时,我收到一条错误消息,说明没有提供键作为get update方法的参数。我不太清楚“key”是什么意思,而且get update方法的参数的唯一有效数据类型是boolean。我的代码如下:

'Declarations
Dim myDataSet As DataSet
Dim MyCommand As OleDb.OleDbDataAdapter
Dim objWorkSheet As Excel.Worksheet = objExcel.ActiveSheet
Dim sizetimer As New System.Timers.Timer

Sub retrieveMyDataSet()
    MyCommand = New OleDbDataAdapter(select * from [MyExcelWorksheet$A13:x150], MyConnection)
     myDataSet = New System.Data.DataSet()
    MyCommand.Fill(myDataSet)
    myDataGridView.DataSource = myDataSet.Tables(0).DefaultView
End Sub

Sub write2Size()
    'A-k gets written.  Entire graph goes to a-x so I only need to writ the columncount -14
   'x is letter 24. k is letter 11.  24-11 = 13.  So, offset needs to be -13
   '39;Rows 13 through first blank
        Dim rowindex As Integer
        Dim columnindex As Integer
        For rowindex = 1 To myDataGridView.RowCount
        For columnindex = 1 To myDataGridView.ColumnCount - 13
            objWorkSheet.Cells(rowindex + 13, columnindex + 0) = myDataGridView(columnindex     - 1, rowindex - 1).Value
        Next
    Next
End Sub

Sub refreshDGV()
    write2DGV()
    myDataSet.Clear()
    Dim x As New OleDbDataAdapter("select * from [MyExcelWorksheet$A13:x150]", MyConnection)
    Dim oledbCommands As New OleDb.OleDbCommandBuilder(x)
    x.UpdateCommand = oledbCommands.GetUpdateCommand() 'oops type! removed = x.UpdateCommand
    x.Update(myDataSet)
    sizetimer.AutoReset = True
    sizetimer.Interval = 2000 '2 seconds
    retrieveMyDataSet()
End Sub

Private Sub refreshbtn_Click(sender As System.Object, e As System.EventArgs) Handles refreshbtnSize.Click
   refreshDGV()
End Sub
不幸的是,当我运行代码时,我得到一条关于not的错误消息 提供一个键作为get update方法的参数

本文解释了此错误的原因,您应该仔细阅读:

您正在使用本文中提到的解决方案之一更新工作表,即对已使用Excel工作簿中的表/查询填充的数据集进行更改,然后调用DataAdapter的update方法将更改从数据集解析回工作簿

但就在我们阅读之后:

但是,要使用更改解决方案的更新方法,必须设置 用于DataAdapter的InsertCommand的参数化命令

和更新命令:

参数化的插入和更新命令 必需,因为OleDbDataAdapter不提供键/索引 Excel工作簿信息;如果没有键/索引字段,则 CommandBuilder无法自动为您生成命令。

这条信息很清楚:如果您想要实现您想要做的事情,您必须显式地编写参数化的
INSERT
UPDATE
命令


别忘了Excel有很多功能,但不是专门设计用来作为数据库的。因此,为了避免很多问题,我建议您切换到另一个本地数据库(SqlServerCompact、SQlLite等)。

非常感谢您的详细回答!
INSERT INTO [Sheet1$] (F1, F2) values (?, ?) 
UPDATE [Sheet1$]SET F2 = ? WHERE F1 = ?