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

时间:2020-03-06 14:58:59  来源:igfitidea点击:

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

  • 用户进入网页,上传XLS文件
  • 使用ADO .NET通过JET引擎连接打开XLS文件,以连接到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文件夹/文件权限才能生效。

在这一点上我完全不知所措

解决方案

好吧,想通了-

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

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

转到目录
\ Documents and Settings " machineName" \ ASPNET \ Local Settings \ Temp
并将读取和写入权限授予用户" EveryOne"
然后它将正常工作。
此外,我们必须在web.config文件中设置""