如何通过OleDB打开存储在byte[]中的Excel文件?

9
我有一个问题,希望你能轻松回答。(Windows Forms Application、C#、Framework 3.5、SQL Server 2008 R2)
我不知道如何通过OleDB打开以byte[]类型加载的Excel文件。
我的操作步骤如下: 我通过表单上传了Excel(.xls(x))文件,并将其保存为varbinary(max)格式存储到数据库中。现在我需要通过oleDB读取该Excel文件。我已经成功从数据库中加载了该文件并将其保存为byte[]变量。如何在oleDB中打开byte[]? 在第一次上传文件时(在将其保存到数据库之前),我通过只传递文件路径就使用OleDB打开了它。当Excel作为byte[]存储在内存中时,如何访问其中的数据?
3个回答

5
如果您想使用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这样的商业工具可以实现这一功能。


0

我不知道你在使用哪个库来处理Excel数据,但我首先想到的是它几乎肯定有一个LoadFromFile方法。它可能不叫这个名字,但它就是这么做的。看看它是否还有一个LoadFromStream方法,如果有的话,将你的byte[]数据加载到MemoryStream中,然后从那里加载XLS。


我不是那个人,我想这可能是因为你没有做好功课。并不存在这样的方法... - Seabizkit

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

您创建了一个名为emp的表对象,并且文件是HttpPostedFileBase类型的文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接