Обновление базы данных MS Access из Datagridview - PullRequest
2 голосов
/ 19 марта 2012

Я пытаюсь обновить базу данных доступа ms из таблицы данных.

Сеть данных заполняется нажатием кнопки, а база данных обновляется при изменении любой ячейки.

Пример кодаЯ использовал заполнение при загрузке формы и использует событие 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());
    }
}

Я получаю сообщение об ошибке:

Для обновления требуется действительная команда UpdateCommand при передаче коллекции DataRow с измененными строками.

Я не уверен, куда должна идти эта команда и как ссылаться на ячейку для обновления значения в базе данных.

Ответы [ 2 ]

1 голос
/ 19 марта 2012

Класс dbDataAdapterClass (тот, от которого наследуется OleDbDataAdapter) имеет SelectCommand, UpdateCommand и InsertCommand. Это тот, кто отвечает за выбор, обновление и вставку при явном вызове любого из методов (например, update;)). Поскольку в вашем коде вы никогда не предоставляете команду, объясняющую, как выполнить обновление, адаптер данных не знает, как это сделать.

, поэтому выполните требования, добавив команду обновления в адаптер.

0 голосов
/ 19 марта 2012
dataadapter = new OleDbDataAdapter(sql, connection);

Добавьте код ниже после строки, OleDbCommandBuilder сгенерирует команды для вас.

OleDbCommandBuilder cb = new OleDbCommandBuilder(dataadapter);

Этот учебник даст вам больше информации.

...