Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.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# 我应该通过OleDb Jet4.0读取excel文件并保存到数据集中吗?_C#_Excel_Oledb - Fatal编程技术网

C# 我应该通过OleDb Jet4.0读取excel文件并保存到数据集中吗?

C# 我应该通过OleDb Jet4.0读取excel文件并保存到数据集中吗?,c#,excel,oledb,C#,Excel,Oledb,我必须读取excel文件并将其放入数据集中 我应该通过OleDbDataAdapter读取excel文件内容,然后填写到数据集中吗? 我试过了,但失败了。它说,当数据适配器使用填充方法时,应用程序无法识别数据库格式 代码: 这是否意味着无法直接读取excel数据并将其放入新数据集? 唯一的方法是逐个单元格读取excel数据,并使用datatable插入到新的数据集 提前谢谢 ========================================================== 已解

我必须读取excel文件并将其放入数据集中

我应该通过OleDbDataAdapter读取excel文件内容,然后填写到数据集中吗? 我试过了,但失败了。它说,当数据适配器使用填充方法时,应用程序无法识别数据库格式

代码:

这是否意味着无法直接读取excel数据并将其放入新数据集? 唯一的方法是逐个单元格读取excel数据,并使用datatable插入到新的数据集

提前谢谢

==========================================================
已解决
==========================================================

String queryAll = "SELECT * FROM [Sheet1$]";
String xlsPath = Directory.GetCurrentDirectory() + "\\paid.xls";
String strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + xlsPath +
                 ";Extended Properties='Excel 8.0;IMEX=1';";
try
{
   m_dbDA = new OleDbDataAdapter(queryAll, strConn);
   DataSet dsPaidXls = new DataSet();
   m_dbDA.Fill(dsPaidXls,"[Sheet1$]");
   dataGridView1.DataSource = dsPaidXls;
   dataGridView1.DataMember = "[Sheet1$]";
 }
 catch (System.Exception ex)
 {
     MessageBox.Show(ex.Message);
 }

应避免使用OleDb读取Excel文件。许多陷阱

对于xls文件,这种方法工作得更好、更可靠

对于xlsx文件,请使用Office Open XML SDK:


您应该避免使用OleDb读取Excel文件。许多陷阱

对于xls文件,这种方法工作得更好、更可靠

对于xlsx文件,请使用Office Open XML SDK:


一旦您拥有正确的连接字符串并意识到数据类型的问题,OLEDB就可以很好地工作。Jet适用于2007年之前的版本,您需要为Excel添加扩展属性

String strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
  + xlsPath + "Extended Properties='Excel 12.0 Xml;HDR=YES';";
见:
(包含有用的注释)

一旦您拥有正确的连接字符串并意识到数据类型的问题,OLEDB就可以很好地工作。Jet适用于2007年之前的版本,您需要为Excel添加扩展属性

String strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 
  + xlsPath + "Extended Properties='Excel 12.0 Xml;HDR=YES';";
见:
(包含有用的注释)

通过OleDB读取Excel文件时,请确保提供程序的版本正确(一个用于xls,一个用于xlsx),并确保选择了x86作为平台

否则,它将在64位系统上编译为x64,并且由于OleDb已被弃用,因此没有64位OleDb驱动程序,这意味着您的程序将在调用OleDb时崩溃

此外,还必须安装Office 2007系统驱动程序(ACE数据连接组件)

请参见此处:

您也可以使用ODBC或Excel Package Plus。
同样,如果格式是xls而不是xlsx,则需要在此处使用不同的库

用于XLS的Excel库

Excel Package Plus for XLSX

通过OleDB读取Excel文件时,请确保提供程序的版本正确(一个用于xls,一个用于xlsx),并确保选择了x86作为平台

否则,它将在64位系统上编译为x64,并且由于OleDb已被弃用,因此没有64位OleDb驱动程序,这意味着您的程序将在调用OleDb时崩溃

此外,还必须安装Office 2007系统驱动程序(ACE数据连接组件)

请参见此处:

您也可以使用ODBC或Excel Package Plus。
同样,如果格式是xls而不是xlsx,则需要在此处使用不同的库

用于XLS的Excel库

Excel Package Plus for XLSX

真的吗?我对OleDb很陌生。谢谢你的建议,让我试试这个excelReader@heefan,我用xlsx文件的更好选项更新了我的答案。真的吗?我对OleDb很陌生。谢谢你的建议,让我试试这个excelReader@heefan,我用xlsx文件的更好选项更新了我的答案。是的,对。几分钟前,我已经添加了解析方法。谢谢。是的,对。几分钟前,我已经添加了解析方法。谢谢