Как открыть файл Excel, хранящийся в байте [] через OleDB?

У меня есть один вопрос, и я надеюсь, что он будет легким для вас. (Приложение Windows Forms, C#, Framework 3.5, SQL Server 2008 R2)

Я не знаю, как открыть Excel (он загружается в типе byte[]) через OleDB.

Итак, что я сделал: я загрузил файл Excel (.xls(x)) через форму и сохранил его в базе данных как varbinary(max). Теперь мне нужно прочитать этот файл Excel через oleDB. Мне удалось загрузить этот файл из базы данных и сохранить его в переменную byte[]. Как я могу открыть байт [] в oleDB? Когда я впервые загрузил файл (до его сохранения в базе данных), я открыл его через OleDB, просто передав путь к файлу. Как я могу получить доступ к данным Excel, если они уже сохранены в памяти как байт []?

3 ответа

Если вы хотите читать, используя OleDB, вам нужно записать байты на диск. Например, вы можете сделать это:

var filename = System.IO.Path.GetTempFileName();

// Assuming that fileBytes is a byte[] containing what you read from your database        
System.IO.File.WriteAllBytes(filename, fileBytes);
var connection = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties=\"Excel 12.0;HDR=YES\"";

// Do your work on excel
using (System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(connection))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM [Sheet1$]";

        using (var rdr = cmd.ExecuteReader())
        {
            while (rdr.Read())
            {
                System.Diagnostics.Debug.WriteLine(rdr["ColumnName"]);
            }
        }
    }
    conn.Close();
}

//Cleanup
System.IO.File.Delete(filename);

Если вы не хотите записывать файл на диск, вы можете использовать стороннюю библиотеку, которая может читать файлы Excel из потока памяти. Такие инструменты, как SpreadsheetGear или Aspose, являются коммерческими инструментами, которые могут достичь этого.

Я ничего не знаю о том, какую библиотеку вы используете для работы с данными Excel, но первое, что приходит на ум, это то, что она почти наверняка имеет LoadFromFile метод. Это не может быть названо так, но это то, что он делает. Посмотрите, есть ли у него LoadFromStream метод, и если так, возьмите byte[] данные и загрузить его в MemoryStream и загрузите XLS оттуда.

emp.upload_file = Path.GetFileName(file.FileName);

emp как ваш объект таблицы создан и файл HttpPostedFileBase файл

Другие вопросы по тегам