我有一个ASP.NET Web应用程序,它有一个fileupload控件,允许用户上传一个excel文件供它阅读。
我正在使用OleDBConnection,我觉得我的连接字符串或查询字符串是错误的,因为应用程序不断向我抛出OleDBExceptions(哎哟!)。保存或访问上传文件的好方法是什么?
这是连接字符串:
olcon.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Server.MapPath(fileupFile.FileName) + ";Extended Properties=Excel 12.0";
查询字符串:
OleDbCommand olcmd = new OleDbCommand("SELECT * FROM [Sheet1$]", olcon);
答案 0 :(得分:0)
我怀疑问题源于对Server.MapPath(fileupFile.FileName)
的调用。 FileName
属性是一个便利属性,用于指示要上载到服务器的内容的原始文件名。它(并且如果)将其保存在服务器上时,不一定表示文件的位置或名称。
您似乎仍需要在服务器端接收文件并将其保存到磁盘。有几种方法可以做到这一点。 SaveAs()
方法可能是最简单的方法,但您还拥有FileBytes
和FileContent
属性,可以分别以字节数组或流的形式访问上传的文件。
如果您先将文档保存到硬盘驱动器然后构建连接字符串,我相信这样可以解决问题。
以下是保存上传文件的简单示例。假设“〜/ Documents”文件夹已授予IIS工作进程写入权限(或您使用模拟,并且经过身份验证的用户具有写入权限):
var targetfilepath = Path.Combine(Server.MapPath(~/Documents), fileupFile.FileName);
fileupFile.SaveAs(targetfilepath);
var connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + targetfilepath + ";Extended Properties=Excel 12.0";
// ...
祝你好运。
顺便说一句,您可能已经知道,在connectionstrings.com上有一个关于Excel 2007连接字符串属性的出色参考:http://connectionstrings.com/excel-2007