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

我有一个问题,我希望这对你来说很简单.

(
Windows窗体应用程序,C#,Framework 3.5,SQL Server 2008 R2)

我不知道如何通过OleDB打开Excel(它以byte []类型加载).

那么,我做了什么:
我已经通过表单上传了Excel(.xls(x))文件,并将其作为varbinary(max)保存在数据库中.现在我需要通过oleDB读取该Excel文件.我已经设法从数据库加载该文件并将其保存到byte []变量中.如何在oleDB中打开byte []?
当我第一次上传文件时(在将其保存到数据库之前),我只是通过文件路径通过OleDB打开它.当它已经以byte []的形式存储在内存中时,如何访问Excel的数据?

最佳答案 如果要使用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这样的工具是可以实现这一目标的商业工具.

点赞