远程客户端无法使用ASP.NET/ADO打开XLS文件

时间:2008-10-01 15:57:51

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

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

  1. 用户进入网页,上传XLS文件
  2. 使用ADO .NET打开XLS文件,使用JET引擎连接到Web服务器上的本地上载文件
  3. 这一切在本地工作正常(我的机器作为客户端和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的权限,然后将“Everyone”分配为“毯子”是这个权限相关的?“测试”。

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

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

    此时我完全失去了

2 个答案:

答案 0 :(得分:2)

好的,想通了 -

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

另一种方法可能是创建一个新的应用程序池并让该应用程序池作为具有权限的用户运行,而不是ASPNET

答案 1 :(得分:0)

转到目录 \ Documents and Settings \“machineName”\ ASPNET \ Local Settings \ Temp 并为用户“EveryOne”提供读取,写入权限 然后它会正常工作。 此外,您必须在web.config文件中设置“”