OleDataAdapter填充方法返回空行到数据表

这是我的代码:

public static DataTable GetDataFromSpreadsheet(OleDbConnection conn) { DataTable dt = new DataTable(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); conn.Open(); OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(dt); conn.Close(); return dt; } 

当这个方法被调用的时候,我根本没有得到一个错误! 当我把数据表(dt)放在手表上时,我可以看到它是空的。 没有行标题,行是空的。 我知道这个查询在某种程度上是有效的,因为dt上的Rows.Count返回了我正在查询的表中的行数。

我可能做错了什么?

谢谢您的帮助!

编辑:这是我的连接string

 <add name="EXCEL" connectionString="Provider=Microsoft.ACE.OLEDB.12.0; Data Source={0}; Extended Properties='Excel 8.0; HDR=Yes; IMEX=1;'" /> 

我将文件位置replace为{0}

build立联系

 String strExcelConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=Book1.xls;" + "Extended Properties='Excel 8.0;HDR=Yes'"; OleDbConnection connExcel = new OleDbConnection(strExcelConn); OleDbCommand cmdExcel = new OleDbCommand(); cmdExcel.Connection = connExcel; 

访问表格

 connExcel.Open(); DataTable dtExcelSchema; dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); connExcel.Close(); DataSet ds = new DataSet(); string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; da.SelectCommand = cmdExcel; da.Fill(ds); connExcel.Close(); 
  • 参考

按照这个链接

https://www.connectionstrings.com/excel/

尝试在连接string中设置IMEX=1HDR=YES

DataAdapter.Fill方法的重载列表如下:

  • 填写(数据集)
  • 填充(DataTable,IDataReader)
  • 填充(DataTable [],IDataReader,Int32,Int32)
  • 填充(DataSet,String,IDataReader,Int32,Int32)

没有单个DataTable参数的方法。

在你的情况下,你可以使用Fill(DataSet)方法并返回.Tables [0]或.Tables [“TableName”];

看看下面的代码:

 public static DataTable GetDataFromSpreadsheet(OleDbConnection conn) { DataSet ds = new DataSet(); OleDbCommand cmd = new OleDbCommand("SELECT * FROM [Sheet1$]", conn); conn.Open(); OleDbDataAdapter da = new OleDbDataAdapter(cmd); da.Fill(ds); conn.Close(); return ds.Tables[0]; }