C# 如何通过OleDB打开存储在字节[]中的Excel文件?

C# 如何通过OleDB打开存储在字节[]中的Excel文件?,c#,excel,byte,C#,Excel,Byte,我有一个问题,希望你能轻松回答。 (Windows窗体应用程序,C#,框架3.5,SQL Server 2008 R2) 我不知道如何通过OleDB打开Excel(它是以byte[]类型加载的) 那么,我做了什么: 我已经通过表单上传了Excel(.xls(x))文件,并将其作为varbinary(max)保存在数据库中。现在我需要通过oleDB读取Excel文件。我已设法从数据库加载该文件,并将其保存到byte[]变量中。如何在oleDB中打开字节[]? 当我第一次上传文件时(保存到数据库之前

我有一个问题,希望你能轻松回答。 (Windows窗体应用程序,C#,框架3.5,SQL Server 2008 R2)

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

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

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

如果要使用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等工具是可以实现这一目标的商业工具

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

emp
当您创建的表对象和文件都是
HttpPostedFileBase
file

时,我并不是那个人,我会想象这是因为您没有完成家庭作业。没有这样的方法。。。