2012-03-19 162 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教程会给你更多的信息。