Вопрос

Кто-нибудь знает, как записать файл Excel (.xls) через OLEDB на C#?Я делаю следующее:

   OleDbCommand dbCmd = new OleDbCommand("CREATE TABLE [test$] (...)", connection);
   dbCmd.CommandTimeout = mTimeout;
   results = dbCmd.ExecuteNonQuery();

Но я получаю исключение OleDbException с сообщением:

«Невозможно изменить дизайн таблицы 'тест $'.Он находится в базе данных только для чтения ».

Мое соединение кажется нормальным, и я могу нормально выбирать данные, но не могу вставить данные в файл Excel. Кто-нибудь знает, как я могу получить доступ для чтения/записи к файлу Excel через OLEDB?

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

Решение

Вам нужно добавить ReadOnly=False; к вашей строке подключения

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=fifa_ng_db.xls;Mode=ReadWrite;ReadOnly=false;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";

Другие советы

Я тоже искал и отвечал, но решение Зорантула мне не помогло.Я нашел решение на http://www.cnblogs.com/zwwon/archive/2009/01/09/1372262.html

я удалил ReadOnly=false параметр и IMEX=1 расширенное свойство.

А IMEX=1 Свойство открывает книгу в режиме импорта, поэтому команды, изменяющие структуру (например, CREATE TABLE или DROP TABLE) не работает.

Моя рабочая строка подключения:

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=workbook.xls;Mode=ReadWrite;Extended Properties=\"Excel 8.0;HDR=Yes;\";"

У меня также была такая же проблема.Удалить только расширенное свойство IMEX=1.Это решит вашу проблему.Ваша таблица будет создана в файле Excel...

Пара вопросов:

  • Имеет ли пользователь, запускающий ваше приложение (вы?), разрешение на запись в файл?
  • Файл доступен только для чтения?
  • Какая у вас строка подключения?

Если вы используете ASP, вам необходимо добавить пользователя IUSER_*, как показано в этот пример.

  • Как проверить разрешения на запись в файл Excel для моего приложения (я использую Excel 2007)?
  • Файл не доступен только для чтения и не защищен (насколько мне известно).
  • Моя строка подключения:

"Provider = microsoft.jet.oledb.4.0; Data Source = fifa_ng_db.xls; mode = readwrite; расширенные свойства = " Excel 8.0; hdr = yes; imex = 1 ""

В дополнение к ответу Майкла Харена.Учетная запись, которую вам нужно будет предоставить разрешения на изменение файла XLS, скорее всего, будет NETWORK SERVICE, если этот код выполняется в приложении ASP.NET (он указан в пуле приложений IIS).Чтобы точно узнать, под какой учетной записью работает ваш код, вы можете сделать простое:

Response.Write(Environment.UserDomainName + "\\" + Environment.UserName);

Я работал под ASP.NET и обнаружил сообщения об ошибках «Невозможно изменить дизайн...» и «Невозможно найти ISAM...».

Я обнаружил, что мне нужно:

а) Используйте следующую строку подключения:

Provider=Microsoft.Jet.OLEDB.4.0;Mode=ReadWrite;Extended Properties='Excel 8.0;HDR=Yes;';Data Source=" + {path to file};

Обратите внимание, у меня тоже были проблемы с IMEX=1 и с ReadOnly=false атрибуты в строке подключения.

б) Предоставьте ВСЕМ полные права на папку, в которую записывался файл.Обычно ASP.NET запускается под учетной записью NETWORK SERVICE, у которой уже есть разрешения.Однако код OleDb не является управляемым, поэтому он должен выполняться в каком-то другом контексте безопасности.(Мне сейчас лень выяснять, какой аккаунт, поэтому я просто использовал ВСЕ.)

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