Microsoft.ACE.OleDB.12.0 + Windows Server 2008 R2 + Доступ к электронной таблице по UNC-пути в SharePoint = :( - PullRequest
0 голосов
/ 25 ноября 2010

Вот очень специфический вопрос.У меня есть разработчик, который пытается открыть документ Excel по пути UNC \\ sharepoint.site.com \ sites \ site \ library \ folder one \ test.xlsx , используя Microsoft.Поставщик ACE.OleDB.12.0 , в коде C # работает на IIS7 на Windows Server 2008 R2 .

Как только мы разобрались даже получаю провайдер должен быть распознан на сервере, мы столкнулись со следующей ошибкой:

Ядро базы данных Microsoft Office Access не может открыть или записать в файл '\\ sharepoint.site.com \ sites\ site \ library \ folder one \ test.xlsx '.Он уже открыт исключительно другим пользователем, или вам нужно разрешение на просмотр и запись его данных

Просматривая журнал безопасности в нашем SharePoint WFE, я вижу, что удостоверение пула приложений успешно входит в систему.по вызову conn.Open(), и он действительно имеет полный контроль над сайтом, к которому осуществляется доступ.Так что же дает?Кто-нибудь случайно сталкивался с этим раньше?Используемый код ниже:

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\sharepoint.site.com\sites\site\library\folder one\test.xlsx;Extended Properties=""Excel 12.0;""";

OleDbConnection conn = new OleDbConnection(connectionString);

conn.Open();

Ответы [ 2 ]

0 голосов
/ 25 апреля 2014

UNC-путь был моей точной проблемой.На моем локальном компьютере я мог без проблем подключиться к желаемому документу Excel и работать со строками из документа Excel.Однако, когда я развернул свой веб-сайт на сервере, он подключился к документу Excel с использованием приведенной ниже строки подключения, но строки не возвращались.Моя строка подключения была:

string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES\";", filePath); //where filePath is the excel document file name

Использование OleDbConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); для возврата TABLE_NAME / Sheet документа Excel, который не дал результатов на сервере.

Я обнаружил, что веб-сервер(IIS), подключенный через UNC для получения файлов веб-сайта на другом сервере, но, как упоминал Дэвид выше, ACE очень темпераментен с UNC-путямиИспользование System.Web.HttpContext.Current.Server.MapPath решает эту проблему.Вот моя последняя строка подключения:

string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0;HDR=YES\";", System.Web.HttpContext.Current.Server.MapPath(filePath));
0 голосов
/ 10 мая 2011

Оказывается, что по какой-то причине ферме не понравился адрес балансировки нагрузки для фермы. Явное нацеливание на один из веб-интерфейсов в пути UNC сработало. Я надеюсь, что это поможет кому-то еще, кто сталкивается с той же проблемой!

...