这是我的情况。我正在设计一个程序,它从远程网络驱动器获取 Excel 文件(可能是 csv、xls 或 xlsx 格式),处理数据,然后输出并存储该过程的结果。该程序提供了一个文件名列表框,这些文件名使用此处接受的答案中详述的方法从远程网络驱动器文件夹中获取。一旦用户从列表框中选择了一个文件名,我希望程序找到该文件并从中获取信息以进行数据处理。我曾尝试在线程安全上下文中使用此方法从 Excel 文件中读取数据,但该方法失败而没有给出任何类型的错误。它似乎没有终止。我会以错误的方式解决这个问题吗?
编辑 - (最后说明:我已取出 OleDbDataAdapter 并将其替换为 EPPlus 处理。)
我能够从代码中清除敏感数据,所以这里是:
protected void GetFile(object principalObj)
{
if (principalObj == null)
{
throw new ArgumentNullException("principalObj");
}
IPrincipal principal = (IPrincipal)principalObj;
Thread.CurrentPrincipal = principal;
WindowsIdentity identity = principal.Identity as WindowsIdentity;
WindowsImpersonationContext impersonationContext = null;
if (identity != null)
{
impersonationContext = identity.Impersonate();
}
try
{
string fileName = string.Format("{0}\\" + Files.SelectedValue, @"RemoteDirectoryHere");
string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.14.0; data source={0}; Extended Properties=Excel 14.0;", fileName);
OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM Sheet1", connectionString);
DataSet ds = new DataSet();
adapter.Fill(ds, "Sheet1");
dataTable = ds.Tables["Sheet1"];
}
finally
{
if (impersonationContext != null)
{
impersonationContext.Undo();
}
}
}
附加编辑
现在 xlsx 文件已添加到组合中。
第三者
在这种情况下,第三方解决方案是不可接受的(除非它们允许不受限制的商业用途)。
尝试 - (最后说明:最终我不得不放弃 OleDb 连接。)
我已经尝试了所有提供的不同连接字符串,并且一次只尝试了一种文件类型。没有一个连接字符串适用于任何文件类型。
权限
用户确实有权访问该文件及其目录。