2011-09-19 41 views
-2

感謝大家縮小我的問題,並沒有幫助我。這個網站很棒。VB.NET /訪問數據庫 - 在運行時創建的列不更新

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

我懷疑你的DataSet(ds)不同步。

首先,確認DataSet中存在新列:對於您的三種方法中的任何一種,在循環開始之前放置一個斷點,並查看ds.Tables(「SchoolMaticsDatabase」)。列並確認新列實際上在那裏列出。或者,在循環內部放置一個Debug.Print column.ColumnName,然後在「輸出」窗口中查找它。第二,假設新列在列成員中,我會建議在側面製作一個小項目以進一步探索您的問題。簡單一點,沒什麼特別的。讓它創建一個列(避免首先使用日期作爲名稱),給它一個值,更新它的值,看看它是如何發生的。

祝你好運!

+0

感謝您的幫助,我會確保您的建議。 – Saif

+0

它似乎確實存在,但仍然不會更新列... – Saif