Oledb不会将excel中的完整数据转发到数据集中

时间:2013-06-12 06:37:58

标签: excel dataset oledb

我正在尝试使用OLEDB将excel中的数据导入数据集,但我没有将excel中的所有行都放入数据集中。我在Excel工作表中有243300行,但我在数据集表中只有44401行。

以下是我正在使用的代码:

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;
    } 

1 个答案:

答案 0 :(得分: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();
            }

希望这会给你至少一些参考来帮助你处理你的情况。