我目前正在嘗試創建一個小程序,該程序從datagridview中顯示的MDB數據庫中獲取數據。該程序應允許用戶修改(添加,更新,刪除)datagridview中的數據。此外,一切都應該自動更新到MDB(無按鈕)。我知道關於這個主題有很多話題,但是由於某些原因,我無法重現相同的結果。通過datagridview實時更新MDB數據庫
我能夠從MDB文件中檢索數據並將其顯示在datagridview中,但我無法添加,修改或刪除數據。該程序不斷拋出異常,但我不明白爲什麼。
首先用戶必須創建一個數據庫。數據庫由代碼自動生成。
private void CreateNewDatabase_Click(object sender, EventArgs e)
{
string DB_FILENAME = "c:\Test.mdb";
// GENERATE THE ACCESS FILES, ITS TABLES AND ITS COLUMNS
var cnnStr = "Provider=Microsoft.Jet.OLEDB.4.0.;Data Source=" + DB_FILENAME; //Use a late bound COM object to create a new catalog. This is so we avoid an interop assembly
var catType = Type.GetTypeFromProgID("ADOX.Catalog");
object o = Activator.CreateInstance(catType);
catType.InvokeMember("Create", System.Reflection.BindingFlags.InvokeMethod, null, o, new object[] { cnnStr });
OleDbConnection cnn = new OleDbConnection(cnnStr);
cnn.Open();
var cmd = cnn.CreateCommand();
// CREATE SCHEDULE TABLE
cmd.CommandText = "CREATE TABLE SCHEDULE ([ID] IDENTITY PRIMARY KEY, [Day] TEXT, [Month] TEXT, [Year] TEXT, [IMS] TEXT, [Customer] TEXT, [Short Description] TEXT, [Long Description] TEXT, [Delivery Ticket Number] TEXT, [Returned] TEXT)";
cmd.ExecuteNonQuery();
cmd.CommandText = "INSERT INTO SCHEDULE ([ID]) VALUES (1)";
cmd.ExecuteNonQuery();
// DISPOSE OF THE VARIABLES USED
cnn.Close();
cnn.Dispose();
cmd.Dispose();
}
一旦數據庫已經創建,它就會在窗體中使用,並在其中包含一個datagridview。
public void Initialize()
{
Con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sttngs.DBloc);
Con.Open();
// TRY TO OPEN THE DATABASE FILE AND POPULATE THE DATAGRIDVIEW
da = new OleDbDataAdapter("SELECT [Day], [Month], [Year], [IMS], [Customer], [Short Description], [Long Description], [Delivery Ticket Number], [Returned] FROM SCHEDULE",Con); // WHERE [Returned] = '" + "NO' ", Con);
// POPULATE cBuilder
cBuilder = new OleDbCommandBuilder(da);
ScheduleData = new DataTable();
da.Fill(ScheduleData);
if (ScheduleData.Rows.Count > 0)
{
BindingSource BDS = new BindingSource();
BDS.DataSource = ScheduleData;
this.dataGridView.DataSource = BDS;
}
}
一旦在DataGridView的數據被改變(通過CellValidating事件處理)的數據應在MDB進行更新。
private void dataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (ScheduleData.GetChanges() != null)
{
dataGridView.EndEdit();
da.Update(ScheduleData);
ScheduleData.AcceptChanges();
}
}
該代碼是非常直接的,但由於某種原因,我無法弄清楚爲什麼MDB中的數據沒有更新。我一直堅持一段時間,所以任何幫助都會很棒!
德rek,我的連接是開放的,因爲我公開了它。它在初始化過程中打開並在表單關閉時關閉。 – user2118930 2013-02-28 11:37:01
我也嘗試實現更新,插入和刪除命令,但這似乎仍然不起作用。它只是崩潰,並說它無法執行更新語法。還有其他建議嗎? – user2118930 2013-02-28 11:44:03
您的SQL語法很糟糕,請參閱我的更新。 – Derek 2013-02-28 12:38:05