从Datagridview更新MS Access数据库

时间:2012-03-19 12:53:35

标签: c# sql datagridview tableadapter dataadapter

我正在尝试从datagridview更新ms访问数据库。

在点击按钮时填充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   修改过的行。

我不确定此命令的位置以及如何引用单元格来更新数据库中的值。

2 个答案:

答案 0 :(得分:1)

dbDataAdapterClass(OleDbDataAdapter继承的那个)具有SelectCommand,UpdateCommand和InsertCommand。当您显式调用任何方法时(例如update;)),这是负责选择,更新和插入的人。 由于在您的代码中,您从未提供解释如何进行更新的命令,因此dataadapter不知道如何执行此操作。

所以满足要求,向适配器添加更新命令。

答案 1 :(得分:0)

dataadapter = new OleDbDataAdapter(sql, connection);

在上面的行之后添加以下代码,OleDbCommandBuilder将为您生成命令。

OleDbCommandBuilder cb = new OleDbCommandBuilder(dataadapter);

This教程将为您提供更多信息。