'Microsoft.ace.oledb.12.0'不从服务器上的.xlsx文件读取所有行(IIS7)
我知道这个问题有十几个答案和帖子,但没有任何适用于我的作品。'Microsoft.ace.oledb.12.0'不从服务器上的.xlsx文件读取所有行(IIS7)
我们有我的MVC4应用程序,我将它部署到IIS7到我的服务器和一台机器,我们没有安装Visual Studio。
我们正在做进口/出口数据从/到excel进行批量输入。
我们确实在Office 2007的.xlsx格式的一张工作表中有20000左右的数据(文件保存为Excel工作簿)。
现在,当我通过使用下面的代码读取数据时,它只读取4000-5000行左右的数据。
这整个下面的代码在我的本地机器在那里我做的代码和读取所有20000点的数据从“的Excel 97-2003工作簿以.xls” 但与“Excel工作簿正与的.xlsx工作正常”。
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"))
{
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);
}
}
我已经经历了下面的步骤和解决方案,但它不适合我。
- 安装Microsoft Access数据库引擎2010可再发行组件。
-Installing 2007 Office系统驱动程序:数据连接组件
我们搞不清为什么它的工作我的本地机器上,而不是工作的服务器。
请对这个问题..
提供任何想法或解决方案我曾尝试: - 从解决方案资源管理器中右键单击您的项目,然后单击属性。 - 单击生成选项卡 - 将平台目标更改为:任何CPU至x86 |任何CPU到x64 - 重新构建您的解决方案 - 也使用启用32位应用程序的高级设置中的IIS更改为True/False。
- 也尝试了此链接的所有连接字符串。 https://www.connectionstrings.com/ace-oledb-12-0/
一些时间,而从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';"
这会将所有数据转换为文本格式,所有数据将被显示。
更新的代码
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;\";))
Jet提供程序已过时,不应再使用。 –
感谢Tanay更新.. 但这也没有解决我的问题。 我已经通过此链接给出的连接stirngs,但无论如何它不是整个20000记录 它只是读取4000-5000记录只有.xlsx格式 https://www.connectionstrings.com/ace-oledb -12-0/ –
这是不对的。 IMEX = 1意味着提供者将混合colums作为文本对待,而不是将它视为文本。令人遗憾的是,提供商仍然会扫描前8行,并对列中的数据类型做出决定。如果没有IMEX = 1,那么它将返回Null,表示没有评估到所处理数据类型的所有内容。这不是一个问题,如果它评估它们为文本,但如果它认为它们是数字,那么你会在文本单元中得到空值。在这种情况下,IMEX = 1将返回列的前8个单元格中混合数据类型的列的文本。 –