【问题标题】:Remote clients Can't open XLS file using ASP.NET/ADO远程客户端无法使用 ASP.NET/ADO 打开 XLS 文件
【发布时间】:2008-10-01 15:57:50
【问题描述】:

我正在尝试执行以下操作:

  1. 用户进入网页,上传 XLS 文件
  2. 使用 ADO .NET 打开 XLS 文件,使用 JET 引擎连接到 Web 服务器上本地上传的文件

这一切都可以在本地正常工作(我的机器作为客户端和 Web 服务器) - 实际上正在使用远程客户端在客户的 Web 服务器上工作,但在尝试使用远程客户端进行内部测试时无法正常工作。

我得到的错误是:

TIME:       [10/1/2008 11:15:28 AM]
SEVERITY:   EXCEPTION
PROGRAM:    Microsoft JET Database Engine
EXCEPTION:  Unspecified error
STACK TRACE:       at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
   at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.OleDb.OleDbConnection.Open()

产生错误的代码是:

OleDbConnection l_DbConnection;
        OleDbDataAdapter l_DbCommand;
        DataSet l_dataSet = new DataSet();

        l_DbConnection = new OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; data source=\"" + l_importFileName + "\";Extended Properties=Excel 8.0;");
        l_DbCommand = new OleDbDataAdapter("select * from [Sheet1$]", l_DbConnection);

        //try using provider to read file
        try { l_DbConnection.Open(); }

对“打开”的调用引发了上述异常。

该站点正在使用模拟,并且所有呼叫都是在用户登录客户端时进行的。到目前为止,我所做的一切都是为了让它发挥作用:

按照http://support.microsoft.com/kb/251254/ 此处的步骤操作,并将 TMP/TEMP 环境变量目录的权限分配给我用来测试的用户(也将权限分配给 ASPNET,然后将权限分配给“所有人”作为一揽子“此权限相关吗? " 测试)。

确保文件正在上传,并且 XLS 文件本身继承了允许用户完全访问文件的目录权限。为了以防万一,我还将此目录权限授予“每个人” - 这也没有帮助。

我无需更改任何环境变量,因此在进行这些更改后无需重新启动 - 但我不应该让 Windows 文件夹/文件权限生效。

此时我已经完全不知所措了

【问题讨论】:

    标签: c# asp.net iis ado.net


    【解决方案1】:

    好的,想通了-

    事实证明,即使 IIS 使用模拟并将 TMP/TEMP 环境变量设置为 C:\WINDOWS\Temp,ASP.NET 进程仍在 ASPNET 帐户下运行,并且每个单独的用户都需要对文档和设置的权限\ASPNET\Local Settings\Temp 文件夹

    解决此问题的另一种方法可能是创建一个新的应用程序池,并让该应用程序池以有权访问正确文件夹而不是 ASPNET 的用户身份运行

    【讨论】:

      【解决方案2】:

      进入目录 \Documents and Settings\"machineName"\ASPNET\Local Settings\Temp 并授予用户“EveryOne”的读、写权限 然后它会正常工作。 此外,您必须在 web.config 文件中设置“”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        • 2015-11-23
        • 1970-01-01
        相关资源
        最近更新 更多