3

我有一个应用程序将 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 服务器。

4

7 回答 7

3

虽然权限问题可能更常见,但您也可以从 Windows 文件系统/Access Jet DB Engine 连接限制中遇到此错误,我认为是 64/255。如果你破坏了 255 Access 读/写并发连接或每个进程的 64(?) 连接限制,你会得到这个完全相同的错误。至少我在一个应用程序中遇到过这种情况,该应用程序不断创建连接并且从未正确关闭。一个简单的Conn.close();下降,生活是美好的。我想 Excel 可能会有类似的问题。

于 2010-01-30T23:11:13.480 回答
1

如果您使用模拟,则需要向模拟用户授予权限,而不是/除了 aspnet 用户。

于 2013-05-07T16:43:33.453 回答
1

尝试将位置用单引号括起来

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'");
于 2008-11-01T00:08:13.780 回答
0

内部异常中有什么?这是 64 位应用程序吗?OLEDB 提供程序不适用于 64 位。您必须让您的应用程序以 x86 为目标。尝试在我的 64 位计算机上打开访问数据库时遇到错误时发现此问题。

于 2008-09-18T19:43:57.507 回答
0

我在权限问题上遇到了这个错误,但看起来你已经涵盖了。我还看到它带有连接字符串中的一个标志——你可能会玩一下。

于 2008-09-18T20:13:28.933 回答
0

是的。我也这样做了。取出 IMEX=1,取出扩展属性等。我设法在开发和测试服务器上破解它。:) 我一次把它们放回去,直到它被固定在 dev 上并再次测试,但仍然没有在 prod 上工作。

于 2008-09-18T20:16:27.507 回答
0

不确定这是否是您面临的问题,
但是,在处理连接之前,您应该执行 Connection.Close(),
因为 Connection.Dispose() 命令是从 Component 继承的,并且不会正确处理某些连接资源。
未正确处理连接可能会导致访问问题。

于 2020-03-05T09:42:00.523 回答