VB.NET / Access DB - 在运行时创建的列不是正在更新

时间:2011-09-19 16:16:16

标签: database vb.net updating

感谢大家翻阅我的问题,而不是帮助我。这个网站很棒。

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

其次,假设新列位于Columns成员中,我建议在侧面制作一个小项目以进一步探索您的问题。简单,没什么特别的。让它创建一个列(避免首先使用日期作为名称),给它一个值,更新它的值,看看它是怎么回事。

祝你好运!