感谢大家翻阅我的问题,而不是帮助我。这个网站很棒。
我的程序在运行时使用以下代码创建列:
Cmd = New OleDb.OleDbCommand("ALTER TABLE [Parent] ADD [" & ColumnDate & "] int", con)
objCmd = New OleDb.OleDbCommand("ALTER TABLE [Parent] ADD [" & ColumnDate & "] int", con)
objCmd.ExecuteNonQuery()
我使用以下代码将数据添加到新插入的列中:
da.SelectCommand = New OleDb.OleDbCommand(sql, con)
Dim cb As New OleDb.OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
ds.Tables("SchoolMaticsDatabase").Rows(inc).Item(ColumnDate) = Hours * Num
da.Update(ds, "SchoolMaticsDatabase")
以上所有工作都很好;当我尝试编辑最初放在新添加的列中的信息时,会出现问题。这些是我采取的方法。 (它们都没有给出错误消息;它只是不会在数据库中更新。)
方法1:
da.SelectCommand = New OleDb.OleDbCommand(sql, con)
Dim cb As New OleDb.OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
For Each column As DataColumn In ds.Tables("SchoolMaticsDatabase").Columns
If IsDate(column.ColumnName) = True Then
ds.Tables("SchoolMaticsDatabase").Rows(inc).Item(column.ColumnName) = DataGridView3.Item(column.ColumnName, 0).Value
End If
Next
da.Update(ds, "SchoolMaticsDatabase")
方法2:
da.SelectCommand = New OleDb.OleDbCommand(sql, con)
Dim cb As New OleDb.OleDbCommandBuilder(da)
cb.QuotePrefix = "["
cb.QuoteSuffix = "]"
For count = 13 To MaxColumns - 1
ds.Tables("SchoolMaticsDatabase").Rows(inc).Item(count) = DataGridView3.Item(count, 0).Value
Next
da.Update(ds, "SchoolMaticsDatabase")
方法3:
For Each column As DataColumn In ds.Tables("SchoolMaticsDatabase").Columns
If IsDate(column.ColumnName) Then
Cmd = New OleDb.OleDbCommand("UPDATE [Parent] SET [" & column.ColumnName & "]=" & DataGridView3.Item(column.ColumnName, 0).Value & " WHERE [ID]=" & inc + 1, con)
objCmd = New OleDb.OleDbCommand("UPDATE [Parent] SET [" & column.ColumnName & "]=" & DataGridView3.Item(column.ColumnName, 0).Value & " WHERE [ID]=" & inc + 1, con)
objCmd.ExecuteNonQuery()
End If
Next
我通过打开访问数据库手动向表中添加了一列,所有上述方法都用于编辑存储在该列中的数据。所以我认为这与列在运行时创建的事实有关。
答案 0 :(得分:0)
我怀疑您的DataSet(ds)不同步。
首先,确认新列存在于DataSet中:对于三种方法中的任何一种,在循环开始之前设置断点,然后查看ds.Tables(“SchoolMaticsDatabase”)。并确认新列实际列在那里。或者,在循环中放置一个Debug.Print column.ColumnName
并在“输出”窗口中查找它。
其次,假设新列位于Columns成员中,我建议在侧面制作一个小项目以进一步探索您的问题。简单,没什么特别的。让它创建一个列(避免首先使用日期作为名称),给它一个值,更新它的值,看看它是怎么回事。
祝你好运!