FileUploadControl без доступа к файловой системе - PullRequest
1 голос
/ 03 августа 2011

К сожалению, и OLEDB, и FileUploadControl, похоже, нуждаются в пути.

Сейчас это работает после того, как пользователь отправил файл excel, но не работает на моем сервере из-за 0 доступа к файловой системе:

FileUploadControl.SaveAs(filePath);
ConvertToCSV(filePath);
...
var connectionString = string.Format("Provider=Microsoft.Jet.OLEDB.4.0; data source={0}; Extended Properties=Excel 8.0;", filePath);
var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);

Я вижу, FileUploadControl предоставляет поток и байт-код. Можно ли обойти файл с этими свойствами?

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Посмотрите на Excel Data Reader

Я смог прочитать значения из потока без проблем, используя следующий код:

Stream myStream = MyFileUpload.FileContent;

IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(myStream);
DataSet result = excelReader.AsDataSet();

string r1c1Val = result.Tables[0].Rows[0][0].ToString();

Очевидно, мой примерэто действительно просто, но использование данных в качестве DataSet должно дать вам большую гибкость в том, как вы их читаете.

1 голос
/ 03 августа 2011

AFAIK OleDB не будет работать с потоками ...

Если вы действительно хотите получить доступ к Excel-файлу непосредственно в памяти после загрузки, тогда вам понадобится какой-то сторонний компонент (например, Flexcel,Aspose.Cells, SpreadsheetGear ...), который может загружать файлы Excel прямо из памяти (FileUploadControl.FileBytes или FileUploadControl.FileContent) ...

Хотя не уверен, что ConvertToCSV делает и может ли он работать с памятью...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...