远程客户端无法使用ASP.NET/ADO打开XLS文件
我正在尝试执行以下操作:
- 用户进入网页,上传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文件中设置""