我有一个应用程序将Excel .xls文件上传到文件系统,使用对象实例上的.open()方法打开带有oledbconnection对象的文件,然后将数据存储在数据库中。将文件上载和写入文件系统工作正常,但在尝试在我们的生产服务器上打开文件时出现错误仅。该应用程序在另外两台服务器(开发和测试服务器)上运行良好。
以下代码在Exception.Message中生成“未指定的错误”。
引用:
System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + location + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
try
{
x.Open();
}
catch (Exception exp)
{
string errorEmailBody = " OpenExcelSpreadSheet() in Utilities.cs. " + exp.Message;
Utilities.SendErrorEmail(errorEmailBody);
}
:结束报价
服务器的c:\\ temp和c:\ Documents and Settings \\ aspnet \ local settings \ temp文件夹都提供\ aspnet完全控制。
我认为存在某种权限问题,但似乎找不到所述文件夹的权限与上载Excel文件的文件夹/目录之间的任何差异。相同的位置用于保存文件并打开它,这些方法可以在我的工作站和两个Web服务器上运行。 Windows 2000 SP4服务器。
答案 0 :(得分:3)
虽然权限问题可能更常见,但您也可以从Windows文件系统/ Access Jet数据库引擎连接限制中遇到此错误,我认为这是64/255。如果您破坏了255个Access读/写并发连接或每个进程的64(?)连接限制,您可以得到完全相同的错误。至少我在一个连续创建连接并且从未正确关闭的应用程序中遇到过这种情况。一个简单的Conn.close();
掉进去,生活很美好。我想Excel可能有类似的问题。
答案 1 :(得分:1)
如果您正在使用模拟,则需要向模拟用户授予权限,而不是/除了aspnet用户之外。
答案 2 :(得分:0)
内部异常中的任何内容?这是64位应用程序吗? OLEDB提供程序不支持64位。您必须将应用程序定位到x86。在尝试在我的64位计算机上打开访问数据库时遇到错误,发现这一点。
答案 3 :(得分:0)
烨。我也这样做了。拿出IMEX = 1,取出扩展属性等。我设法在开发和测试服务器上打破它。 :)我把它们一次放回一个,直到它在dev上修复并再次测试,但仍然没有生产工具。
答案 4 :(得分:0)
尝试用单引号包装该位置
System.Data.OleDb.OleDbConnection x = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + location + "';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'");
答案 5 :(得分:0)
不确定这是否是您面临的问题,
但是,在处置连接之前,应执行Connection.Close(),
,因为Connection.Dispose()命令是从Component继承的,并且不能正确处置某些连接资源。
不正确处理连接可能会导致访问问题。
答案 6 :(得分:-1)
我在权限方面遇到了这个错误,但看起来你已经覆盖了这个错误。我也看过它与连接字符串中的一个标志 - 你可能会玩那个。