-2

感谢大家对我的问题不屑一顾,而不是帮助我。这个网站太棒了。

我的程序在运行时使用以下代码创建列:

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")

以上所有工作正常;当我尝试编辑最初放置在新添加列中的信息时,就会出现问题。这些是我采取的方法。(它们都没有给出错误消息;它根本不会在数据库中更新。)

方法一:

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")

方法二:

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

我通过打开访问数据库手动向表中添加了一列,上述所有方法都适用于编辑存储在该列中的数据。所以我认为这与列是在运行时创建的事实有关。

4

1 回答 1

0

我怀疑您的 DataSet (ds) 不同步。

首先,确认数据集中存在新列:对于您的三种方法中的任何一种,在循环开始之前放置一个断点,然后查看 ds.Tables("SchoolMaticsDatabase").Columns 并确认新列实际上列在那里。或者,将 aDebug.Print column.ColumnName放入循环中并在“输出”窗口中查找它。

其次,假设新列在 Columns 成员中,我建议您在旁边做一个小项目来进一步探索您的问题。让它简单,没有什么花哨的。让它创建一个列(首先避免使用日期作为名称),给它一个值,更新它的值,看看它是如何进行的。

祝你好运!

于 2011-09-19T17:30:01.023 回答