C# ';微软.ace.oledb.12.0';未从服务器(IIS7)上的.xlsx文件中读取所有行
我知道这个问题有十几个答案和帖子,但没有一个适合我 我们有我的MVC4应用程序,我将它部署到IIS7的服务器和一台没有安装visual studio的机器上 我们正在从excel导入/导出数据,以进行批量输入 我们有大约20000个数据,一张纸上有.xlsx格式的Office2007(文件是另存为Excel工作簿) 现在,当我使用下面的代码读取数据时,它只读取大约4000-5000行的数据 下面的全部代码在我的本地机器上运行良好,我在那里编写代码并读取“Excel97-2003工作簿with.xls”中的所有20000行数据 但不使用“带.xlsx的Excel工作簿” 我已经完成了以下步骤和解决方案,但它不适合我 -安装Microsoft Access数据库引擎2010可再发行 -安装2007 Office System驱动程序:数据连接组件 我们不明白为什么它在我的本地机器上工作而在服务器上不工作 请提供有关此问题的任何想法或解决方案 我所尝试的: -在解决方案资源管理器中右键单击项目,然后单击属性。 -单击“生成”选项卡 -将平台目标从:任意CPU更改为x86 |任意CPU更改为x64 -重新构建您的解决方案 -还对IIS的“提前启用”设置进行了更改,将“启用32位应用程序”设置为True/FalseC# ';微软.ace.oledb.12.0';未从服务器(IIS7)上的.xlsx文件中读取所有行,c#,asp.net,iis-7,oledb,web-deployment,C#,Asp.net,Iis 7,Oledb,Web Deployment,我知道这个问题有十几个答案和帖子,但没有一个适合我 我们有我的MVC4应用程序,我将它部署到IIS7的服务器和一台没有安装visual studio的机器上 我们正在从excel导入/导出数据,以进行批量输入 我们有大约20000个数据,一张纸上有.xlsx格式的Office2007(文件是另存为Excel工作簿) 现在,当我使用下面的代码读取数据时,它只读取大约4000-5000行的数据 下面的全部代码在我的本地机器上运行良好,我在那里编写代码并读取“Excel97-2003工作簿with.x
- 还尝试了此链接中的所有连接字符串。
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0"
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';"
更新的连接字符串
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0"
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';"
这会将您的所有数据转换为文本格式,所有数据都会显示出来
更新代码
private void FillDataSet(HttpPostedFileBase file, DataSet ds)
{
using (
var con =
new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" File Path";Extended Properties=Excel 12.0;HDR=YES;IMEX=1';"))
{
con.Open();
var dtSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
var strSheetName = "";
strSheetName = dtSchema.Rows[0]["TABLE_NAME"].ToString();
var cmd = new OleDbCommand();
var da = new OleDbDataAdapter();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM [" + strSheetName + "]";
da = new OleDbDataAdapter(cmd);
da.Fill(ds);
}
}
试试这个。我也有一些问题
new OleDbConnection(@"Provider=Provider=Microsoft.Jet.OLEDB.4.0;Data Source;Data Source=" File Path";Extended Properties=\"Excel 8.0;HDR=Yes;\";))
我也有同样的问题。该程序在我的本地/SIT环境中运行良好,但我无法读取所有Excel行。它不允许我将平台目标从任何CPU更改为x86 | x64。我的生产环境在读取Excel文件(
.xlsx
)时在Windows Server 2012 R2和IIS8上工作
我可以通过以下步骤解决此问题:
“Provider=Microsoft.ACE.OLEDB.12.0;数据源=FilePath;扩展属性=\”Excel 12.0;HDR=否;IMEX=1;“
感谢Tanay的更新。但这也没有解决我的问题。我已经通过了此链接提供的连接标记,但在任何情况下,它都不会读取整个20000条记录,它只是读取4000-5000条记录,仅使用.xlsx格式。这是不对的。IMEX=1表示提供商将混合列视为文本,而不是将所有内容视为文本文本。遗憾的是,提供程序仍将扫描前8行,并对列中的数据类型做出决定。如果IMEX=1,则对于未计算为其确定的数据类型的所有内容,它都将返回Null。如果它仍然将它们计算为文本,则这不是问题,但如果它认为它们是数字,则文本单元格中的值将为空。在这种情况下,IMEX=1将为列的前8个单元格中存在混合数据类型的列返回文本。Jet提供程序已过时,不应再使用。我有相同的问题,如果您找到任何解决方案,请与我们共享。