1

У меня есть веб-приложение ASP.NET с элементом управления файловой системой, позволяющим пользователям загружать файл Excel для его чтения.Прочитайте excel, загруженное через FileUpload

Я использую OleDBConnection, и я чувствую, что моя строка подключения или ошибка повторяются неправильно, так как приложение продолжает бросать OleDBExceptions на меня (ouch!). Что было бы хорошим способом сохранить или получить доступ к загруженным файлам?

Вот строка соединения:

olcon.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(fileupFile.FileName) + ";Extended Properties=Excel 12.0"; 

Строка запроса:

OleDbCommand olcmd = new OleDbCommand("SELECT * FROM [Sheet1$]", olcon); 

ответ

0

Я подозреваю, что проблема коренится в вызове Server.MapPath(fileupFile.FileName). Свойство FileName - это свойство удобства, указывающее исходное имя файла, загружаемого на сервер. Это не обязательно указывает местоположение или имя файла, когда (и если) вы сохраняете его на сервере.

Казалось бы, вам все равно нужно получить файл на стороне сервера и сохранить его на диск. Существует несколько способов сделать это. Метод SaveAs(), пожалуй, самый простой, но у вас также есть свойства FileBytes и FileContent, которые дают вам доступ к загруженному файлу в виде байтового массива или потока соответственно.

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

Вот простой пример сохранения загруженного файла. Предположим, что папка «~/Документы» предоставил разрешения процесс записи рабочих IIS (или что вы используете олицетворения и ваш опознанный пользователь разрешения на запись):

var targetfilepath = Path.Combine(Server.MapPath(~/Documents), fileupFile.FileName); 
fileupFile.SaveAs(targetfilepath); 

var connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetfilepath + ";Extended Properties=Excel 12.0"; 
// ... 

удачи.

Кстати, и вы уже знаете, есть отличная ссылка на Excel 2007 строк соединения свойств в connectionstrings.com: http://connectionstrings.com/excel-2007

+0

Спасибо! Я немного скорректировал его, вытащив «~/Documents» в targetfilepath и вставив файл fileFile.FileName. Это то, что он есть сейчас: var targetfilepath = Path.Combine (Server.MapPath (fileupFile.FileName)); – loreedee

Смежные вопросы