在讨论了关于Stackoverflow和其他电路板的多个问题/答案之后,我仍然迷茫,为什么我不能更新Access数据库。自从我很早就开始工作,我就把它弄坏了!尽管MS拥有大量的文档,但与如何将oledbcommand与ExecuteReader或ExecuteNonQuery一起使用(我用来将数据加载到应用程序中)相比,我仍然对如何有效使用数据适配器有些困惑。
这里是我工作的更新部分:
Public Function UpdateTable(strTable As String, dgDataTable As DataTable) As Boolean Dim DS As New DataSet dgDataTable.TableName = strTable DS.Tables.Add(dgDataTable) Using OpenCon = New OleDb.OleDbConnection(strConnectionString) Using DataAdapter As New OleDbDataAdapter("SELECT * FROM " & strTable, OpenCon) Dim DBcmd As OleDbCommandBuilder = New OleDbCommandBuilder(DataAdapter) DBcmd.QuotePrefix = "[" DBcmd.QuoteSuffix = "]" DataAdapter.UpdateCommand = DBcmd.GetUpdateCommand() Try OpenCon.Open() DataAdapter.Fill(DS.Tables(strTable)) If DataAdapter.Update(DS.Tables(strTable)) > 0 Then Return True Else Return False End If Catch exo As Exception MessageBox.Show(exo.Message) Return False End Try End Using End Using End Function
我的函数尝试使用数据表中的信息,从datagridview更新名称为
strTable
的现有Access表。每次运行都将更新检查> 0,并返回false,这表示应按语法进行操作(即无错误消息)。我已经跟踪了该表,并且该表具有它应该具有的所有数据(因此该信息已通过更新命令从网格正确传递)。我正在将其应用到数据集中,但不确定我是否真的需要它。
我正在通过update方法跟踪变量,我想我知道了为什么它不会更新,但是我不确定该怎么做。它提出的查询是这样的:
dgDataTable
Access表名称是RtoC,具有字段R,C,Type和unknown。我在想“?”没有填充导致查询只是不将数据应用回Access。我不确定如何设置这些项目。
在讨论了关于Stackoverflow和其他电路板的多个问题/答案之后,我仍然迷茫,为什么我不能更新Access数据库。自从我很早就开始工作以来,我就更感到尴尬了……
问题是,该数据适配器的UPDATE [RtoC] SET [R] = ?, [C] = ?, [Type] = ?, [Unknown] = ? WHERE (([R] = ?) AND ([C] = ?) AND ([Type] = ?) AND ((? = 1 AND [Unknown] IS NULL) OR ([Unknown] = ?)))
方法在填充Fill
之后在AcceptChanges
上调用了DataTable
,因此,当您调用Update
时没有要保存的更改。
我在处理数据库时采取了另一种策略,并在查找时发现了jmcilhinney在2014年提供的答案! [Bulk Insert From DataTable to Access Database