我正在使用OLEDB服务器在我的ASP.NET MVC项目中读取excel文件。然后我得到错误 " Microsoft Jet数据库引擎无法打开文件'。它已由其他用户独占打开,或者您需要获得查看其数据的权限#34;。具有不同的CSV文件的连接字符串的相同代码工作正常但是对于Excel connectionString我收到此错误。有没有人知道这个问题的解决方案。
我的代码是:
public JsonResult ImportCSVFiles()
{
HttpPostedFileBase hpf = null;
foreach (string file in Request.Files)
{
hpf = Request.Files[file] as HttpPostedFileBase;
}
string[] FileName;
string filename = hpf.FileName;
string DestinationPath = Server.MapPath("..") + "\\CSVFiles\\";
if (!Directory.Exists(DestinationPath))
{
Directory.CreateDirectory(DestinationPath);
if (System.IO.File.Exists(Server.MapPath("..") + "\\CSVFiles\\" + filename) == false)
{
hpf.SaveAs(DestinationPath + filename);
}
else
{
System.IO.File.Delete(Server.MapPath("..") + "\\CSVFiles\\" + filename);
hpf.SaveAs(DestinationPath + filename);
}
}
else
{
if (System.IO.File.Exists(Server.MapPath("..") + "\\CSVFiles\\" + filename) == false)
{
hpf.SaveAs(DestinationPath + filename);
}
else
{
System.IO.File.Delete(Server.MapPath("..") + "\\CSVFiles\\" + filename);
hpf.SaveAs(DestinationPath + filename);
}
}
bool isFirstRowHeader = true;
string header = isFirstRowHeader ? "Yes" : "No";
string path = "";
string pathOnly = Path.GetDirectoryName(DestinationPath);
string fileName = Path.GetFileName(DestinationPath + "\\" + filename);
string sql = @"SELECT * FROM [" + fileName + "]";
//using (OleDbConnection connection = new OleDbConnection(
// @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
// ";Extended Properties=\"Text;HDR=" + header + "\""))
using (OleDbConnection connection = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly +
";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";"))
using (OleDbCommand command = new OleDbCommand(sql, connection))
using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
{
DataTable dataTable = new DataTable();
dataTable.Locale = CultureInfo.CurrentCulture;
adapter.Fill(dataTable);
}
}
评论的连接字符串用于CSV文件,CSV文件可以正常使用相同的代码。
答案 0 :(得分:0)
我最近处理的程序遇到了同样的问题。我的解决方案是简单地从连接字符串中取出额外的位。我不知道它为什么有用但是因为它适用于我,它可能适合你。这是您的新连接字符串的样子:
using (OleDbConnection connection = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + pathOnly + ";"))
你实际上可能只能保留HDR = Yes位,因为我知道您可能需要告诉它有标题,我不认为留下它会影响它。