2012-03-19 164 views
2

我想從datagridview更新ms訪問數據庫。從Datagridview更新MS Access數據庫

datagridview在按鈕單擊時填充,並且在任何單元格被修改時更新數據庫。

我一直使用的代碼示例在窗體加載時填充並使用cellendedit事件。

private OleDbConnection connection = null; 
private OleDbDataAdapter dataadapter = null; 
private DataSet ds = null; 
private void Form2_Load(object sender, EventArgs e) 
{ 

    string connetionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='C:\\Users\\Peter\\Documents\\Visual Studio 2010\\Projects\\StockIT\\StockIT\\bin\\Debug\\StockManagement.accdb';Persist Security Info=True;Jet OLEDB:Database Password="; 
    string sql = "SELECT * FROM StockCount"; 
    connection = new OleDbConnection(connetionString); 
    dataadapter = new OleDbDataAdapter(sql, connection); 
    ds = new DataSet(); 
    connection.Open(); 
    dataadapter.Fill(ds, "Stock"); 
    connection.Close(); 

    dataGridView1.DataSource = ds; 
    dataGridView1.DataMember = "Stock"; 

} 
private void addUpadateButton_Click(object sender, EventArgs e) 
{ 

} 

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    try 
    { 
     dataadapter.Update(ds,"Stock"); 
    } 
    catch (Exception exceptionObj) 
    { 
     MessageBox.Show(exceptionObj.Message.ToString()); 
    } 
} 

我收到的錯誤是

更新需要的時候通過的DataRow集合 與修改行的一個有效的UpdateCommand。

我不知道這個命令需要去哪裏以及如何引用單元格來更新數據庫中的值。

回答

1

dbDataAdapterClass(OleDbDataAdapter繼承的那個)有一個SelectCommand,UpdateCommand和InsertCommand。當您顯式調用任何方法(例如update;)時,這是負責選擇,更新和插入的人員。 由於在您的代碼中,您從不提供解釋如何執行更新的命令,因此dataadapter不知道如何執行更新。

滿足要求,向適配器添加更新命令。

+0

而不是*將更新命令添加到適配器*我會說設置'UpdateCommand'屬性 – 2015-03-27 14:34:54

0
dataadapter = new OleDbDataAdapter(sql, connection); 

添加以下代碼上面行後,OleDbCommandBuilder將爲您生成命令。

OleDbCommandBuilder cb = new OleDbCommandBuilder(dataadapter); 

This教程會給你更多的信息。