Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';微软.ace.oledb.12.0';未从服务器(IIS7)上的.xlsx文件中读取所有行_C#_Asp.net_Iis 7_Oledb_Web Deployment - Fatal编程技术网

C# ';微软.ace.oledb.12.0';未从服务器(IIS7)上的.xlsx文件中读取所有行

C# ';微软.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

我知道这个问题有十几个答案和帖子,但没有一个适合我

我们有我的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/False

  • 还尝试了此链接中的所有连接字符串。

从excel中读取数据时,需要将所有数据转换为文本格式

旧连接字符串

"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上工作

我可以通过以下步骤解决此问题:

  • 检查IIS应用程序池>高级设置>启用32位应用程序True | False。(我认为这导致程序使用x32 | x64位驱动程序)
  • 搜索ODBC数据源并检查相关的x32 | x64驱动程序。并将驱动程序从v12升级到v14(删除Access数据库引擎2007,安装Access数据库引擎2010)
  • 连接字符串:
    “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提供程序已过时,不应再使用。我有相同的问题,如果您找到任何解决方案,请与我们共享。