0
更新數據表時遇到問題。我做的是這樣的:OledbDataAdapter不更新表
1)從數據庫中裝載的數據(我們稱之爲「舊數據庫」
2)從其他數據庫(數據加載姑且稱之爲「新數據庫」)
3 )清除了來自新的數據庫
4)合併所有舊數據的所有數據(從舊數據庫中)到新數據庫
下面是我試圖做到這一點:
string oldDatabase = this.txtOldReport.Text;
string newDatabase = this.txtNewReport.Text;
string backupFolder = @"C:\Planit\Report Updater\Backups";
if (!Directory.Exists (backupFolder)) {
Directory.CreateDirectory (backupFolder);
}
string fullPath = Path.Combine (backupFolder, string.Format (@"Update Backup_{0}_{1}_{2}_{3}_{4}_{5}",
DateTime.Now.Year,
DateTime.Now.Month,
DateTime.Now.Day,
DateTime.Now.Hour,
DateTime.Now.Minute,
DateTime.Now.Second));
Directory.CreateDirectory (fullPath);
File.Copy (oldDatabase, Path.Combine (fullPath, @"Old Report.mdb"));
File.Copy (newDatabase, Path.Combine (fullPath, @"New Report.mdb"));
OleDbConnection oldConnection = new OleDbConnection (string.Format (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", oldDatabase));
OleDbConnection newConnection = new OleDbConnection (string.Format (@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}", newDatabase));
OleDbCommand oldCommand = oldConnection.CreateCommand ();
OleDbCommand newSelectCommand = newConnection.CreateCommand ();
oldCommand.CommandText = @"SELECT * FROM Reports";
newSelectCommand.CommandText = @"SELECT * FROM Reports";
oldConnection.Open ();
newConnection.Open ();
DataSet oldDataset = new DataSet ();
DataSet newDataset = new DataSet ();
OleDbDataAdapter oldAdapter = new OleDbDataAdapter (oldCommand);
OleDbDataAdapter newAdapter = new OleDbDataAdapter (newSelectCommand);
OleDbCommandBuilder builder = new OleDbCommandBuilder (newAdapter);
builder.QuotePrefix = "[";
builder.QuoteSuffix = "]";
newAdapter.UpdateCommand = builder.GetUpdateCommand (true);
newAdapter.InsertCommand = builder.GetInsertCommand (true);
newAdapter.DeleteCommand = builder.GetDeleteCommand (true);
oldAdapter.Fill (oldDataset);
newAdapter.Fill (newDataset);
newDataset.Tables [ 0 ].Rows.Clear ();
// removed for a response below
//foreach (DataRow dr in newDataset.Tables [ 0 ].Rows) {
// dr.Delete ();
//}
foreach (DataRow dr in oldDataset.Tables [ 0 ].Rows) {
dr.SetAdded ();
newDataset.Tables [ 0 ].ImportRow (dr);
}
// removed for the response below
//newDataset.AcceptChanges ();
newAdapter.Update (newDataset.Tables [ 0 ]);
oldConnection.Close ();
newConnection.Close ();
}
任何人都可以看到我有的問題嗎?當我打電話給'newAdapter.Update'時,沒有任何反應。
感謝您的任何幫助。
所謂
newDataset.Tables[0].Rows.Clear()
,我刪除了'newDataSet.AcceptChanges( );'並刪除了循環,但仍然沒有任何反應。當我在更新之前中斷時,我可以看到newDataset.Tables [0]包含其中的所有信息(在添加之前,所有數據都不相同)。但是,它仍然不會實際更新數據庫。 –您是否檢查newAdapter.InsertCommand是否已設置,並且它是否是有效的命令?我對傳遞給GetInsertCommand的True參數有些懷疑。 – Steve
也可以檢查newDataSet表中的第一行是否具有RowState = Added。 – Steve