2013-06-12 86 views
0

我想从excel中获取数据到使用OLEDB的数据集中,但我并没有将excel中的所有行都放到数据集中。我在Excel表中有243300行,但我只有44401行出现在数据集表中。Oledb不从excel中获取完整的数据到数据集

这里是代码我使用:

public DataSet GetDataSet(string SheetName) 
{ 
     string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFilePath.Text + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=0;TypeGuessRows=0'"; 
     OleDbConnection conExcel = new OleDbConnection(connectionString); 
     conExcel.Open(); 
     OleDbCommand cmd1 = new OleDbCommand("Select * from [" + SheetName + "$]", conExcel); 
     int cnt= cmd1.ExecuteNonQuery(); 
     DataSet ds = new DataSet(); 
     OleDbDataAdapter da = new OleDbDataAdapter(cmd1); 
     conExcel.Close(); 
     da.Fill(ds, "Table"); 
     return ds; 
    } 

回答

0

什么是您使用的数据集表的代码?

为什么不尝试这样的事情(不更新,以符合您的变量名,这是从我自己的程序为例):

  int worksheetNumber = 1; 
      var cnnStr2 = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", exExcel); 
      var cnn2 = new OleDbConnection(cnnStr2); 

      // get schema, then data 
      var dt2 = new DataTable(); 
      try 
      { 
       cnn2.Open(); 
       var schemaTable2 = cnn2.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       if (schemaTable2.Rows.Count < worksheetNumber) 
       { 
        throw new ArgumentException("The worksheet number provided cannot be found in the spreadsheet"); 
       } 
       string worksheet = schemaTable2.Rows[worksheetNumber - 1]["table_name"].ToString().Replace("'", ""); 
       string sql2 = String.Format("select * from [{0}]", worksheet); 
       var da2 = new OleDbDataAdapter(sql2, cnn2); 
       da2.Fill(dt2); 
      } 
      catch (Exception ex) 
      { 
       // ??? 
       throw ex; 
      } 
      finally 
      { 
       // free resources 
       cnn2.Close(); 
      } 

希望这会给你至少有一定的参考,以帮助您与您的情况。