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

我有一个问题,我希望这对你来说很简单。 (Windows窗体应用程序,C#,框架3.5,SQL Server 2008 R2)

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

那么,我做了什么:我已经通过表单上传Excel(.xls(x))文件,并将其作为varbinary(max)保存在数据库中。 现在我需要通过oleDB读取这个Excel文件。 我设法从数据库加载该文件,并将其保存到byte []variables。 我怎样才能在oleDB中打开byte []? 当我第一次上传文件(保存到数据库之前)时,我只是通过传递文件path通过OleDB打开它。 当数据已经以byte []forms存储在内存中时,如何访问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); 

如果您不想将文件写入磁盘,则可以使用可以从存储器stream中读取excel文件的第三方库。 像SpreadsheetGear或Aspose这样的工具是可以实现这一点的商业工具。

我不知道你用什么库来处理你的Excel数据,但首先想到的是它几乎肯定有一个LoadFromFile方法。 这可能不会被称为,但这就是它所做的。 看看它是否也有一个LoadFromStream方法,如果是的话,把你的byte[]数据加载到一个MemoryStream ,并从那里加载XLS。

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

emp作为你创build的表对象,文件是HttpPostedFileBase文件