Команда Update для обновления одной строки в Excel с помощью OLEdb и dataaset.(C#)

StackOverflow https://stackoverflow.com/questions/1422165

  •  07-07-2019
  •  | 
  •  

Вопрос

Я импортирую данные из электронной таблицы Excel.Я использую OLEDB только для чтения.Но у меня возникли проблемы с сохранением результата обратно в исходный файл.Ниже приведен мой код на данный момент.

string ExcelConnectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Mode=ReadWrite;" +
        "Extended Properties=\"Excel 8.0;HDR=No;IMEX=1\";",
        Server.MapPath("./Uploads/" + excelName));
    try
    {
        OleDbDataAdapter ExcelDataAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$A8:AZ67]", ExcelConnectionString);
        DataSet objDataSet = new DataSet();
        ExcelDataAdapter.Fill(objDataSet, "ExcelTable");
        for (int i = 0; i < objDataSet.Tables[0].Rows.Count; i++ )
        {
            Slab slb = new Slab();
            slb.ReceiveDate = objDataSet.Tables[0].Rows[i].Field<DateTime>(0);
            slb.VesselName = objDataSet.Tables[0].Rows[i].Field<string>(1);
            slb.Lot = Convert.ToInt16(objDataSet.Tables[0].Rows[i].Field<double>(2));
            slb.SlabSource = objDataSet.Tables[0].Rows[i].Field<string>(3);
            slb.CertificateNumber = objDataSet.Tables[0].Rows[i].Field<string>(4);

            //I think the next two lines do the same thing.
            objDataSet.Tables[0].Rows[i][4] = "message here";
            objDataSet.Tables[0].Rows[i].SetField<string>(51, "message here");
            ExcelDataAdapter.Update(objDataSet, "ExcelTable");
                  .............
        }

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

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

В документации показан синтаксис команд обновления, аналогичный :

ОБНОВИТЬ таблицу SET fieldId = 1, Description = 'nice', ГДЕ RegionID = 1 Но у меня это не сработает, мне нужно обновить текущую строку в цикле for.

Приветствуется любая помощь, Спасибо

Это было полезно?

Решение

Ух ты.

Я имею в виду...ух ты.

Я не думаю, что этот конкретный метод самобичевания поддерживается в прошлом XP.

Я бы настоятельно рекомендовал вам отказаться от OLEDB и выбрать один из многочисленных API для работы с файлами Excel.Вы можете найти несколько из них здесь: http://www.codeplex.com/site/search?projectSearchText=excel

Я использовал парочку, и они работали чертовски хорошо.В качестве предупреждения ознакомьтесь с OpenXML sdk если вы планируете просто поддерживать Office 2007 +.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top