C # OleDBConnection Excel - PullRequest
       12

C # OleDBConnection Excel

1 голос
/ 14 апреля 2011

Исходя из этого вопроса C # OLEDBConnection to Excel

У меня проблемы с использованием OLEdbCommandBuilder. У меня есть этот код:

 DataTable dt = new DataTable();
            OleDbCommand command = new OleDbCommand();

            command = new OleDbCommand("Select * from [working sheet$]", oleDBConnection);
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
            dataAdapter.SelectCommand = command;

            OleDbCommandBuilder c = new OleDbCommandBuilder(dataAdapter);

            dataAdapter.Fill(dt);

            //arbitrary changed datatable
            dt.Rows[2][3] = "dfd";

            c.GetUpdateCommand();

            dataAdapter.Update(dt);

            oleDBConnection.Close();

Однако, когда я запускаю его, я получаю эту ошибку:

Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

Как я могу обновить лист Excel с обновленной информацией строки / ячейки? Раньше мне никогда не приходилось иметь дело с Excel.

Я погуглил ошибку, но не могу найти ничего, что точно соответствует моим требованиям.

Спасибо

Даррен.

1 Ответ

1 голос
/ 14 апреля 2011

Обновление возможно только в том случае, если адаптеру известен уникальный первичный ключ таблицы excel-database-table. Вы можете добавить id-столбец в качестве первого столбца в Excel, сделать его первичным ключом и продолжить, как это

      ...
      dataAdapter.Fill(dt);
      ...
      System.Data.DataColumn pkCol = dt.Columns[0]; // something like dt.Columns["Id"]
      pkCol.Unique = true;
      dt.PrimaryKey = new DataColumn[] {pkCol };
      ...
      OleDbCommandBuilder c = new OleDbCommandBuilder(dataAdapter);
      ...
...