链接excle的语句是:myConnection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file_path + ";Extended Properties=Excel 8.0;");   OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + table_name + "]", myConnection);
        DataSet ds = new DataSet();结构ds中除了获得的excel的正常数据外,把excle的200多列空白的也查出来了,怎样可以有多少列数据就查询多少列呢?

解决方案 »

  1.   


    #region 读取Excel文件内容到DataSet中
             public static DataSet ReadExcel(string xlsPath)
             {
                 // 读取Excel数据,填充DataSet
                 // 连接字符串            
                 string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +
                                 "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\";" + // 指定扩展属性为 Microsoft Excel 8.0 (97) 9.0 (2000) 10.0 (2002),并且第一行作为数据返回,且以文本方式读取
                                 "data source=" + xlsPath + ";";
                 string sql_F = "SELECT * FROM [{0}]";             System.Data.OleDb.OleDbConnection conn = null;
                 System.Data.OleDb.OleDbDataAdapter da = null;
                 System.Data.DataTable tblSchema = null;
                 IList<string> tblNames = null;             // 初始化连接,并打开
                 conn = new System.Data.OleDb.OleDbConnection(connStr);
                 try
                 {
                     conn.Open();
                 }
                 catch (Exception ex)
                 {
                     throw ex;
                 }
                 // 获取数据源的表定义元数据                        
                 //tblSchema = conn.GetSchema("Tables");
                 tblSchema = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });             //关闭连接
                 conn.Close();             tblNames = new List<string>();
                 foreach (DataRow row in tblSchema.Rows)
                 {
                     tblNames.Add((string)row["TABLE_NAME"]); // 读取表名
                 }             // 初始化适配器
                 da = new System.Data.OleDb.OleDbDataAdapter();
                 // 准备数据,导入DataSet
                 DataSet ds = new DataSet();             foreach (string tblName in tblNames)
                 {
                     da.SelectCommand = new System.Data.OleDb.OleDbCommand(String.Format(sql_F, tblName), conn);
                     try
                     {
                         da.Fill(ds, tblName);
                     }
                     catch
                     {
                         // 关闭连接
                         if (conn.State == ConnectionState.Open)
                         {
                             conn.Close();
                         }
                         throw;
                     }
                 }             // 关闭连接
                 if (conn.State == ConnectionState.Open)
                 {
                     conn.Close();
                 }
                 return ds;
             }
             #endregion
      

  2.   

    道理这不是一样的吗? 不行啊  把excle的所有列都查出来了  而excle中真正有数据的就几列
      

  3.   

    你的查询语句写的是查询所有数据所以空白列出来了,你把这条语句修改下就可以了
    将select * from ....替换成
    select 字段1,字段2,字段3,字段4,字段5 ...from...
    也就是说将你要查询的字段都列出来这样就不会出现空白列
      

  4.   


    因为在这里 excle的格式布局不确定的  所有没法知道具体有多少列,列名是什么
      

  5.   

    那我想问你,你不用建数据库吗,你数据库字段也没确定?你筛选数据总有个条件吧,根据这些还不能确定?总之问题就这,你都写了select *  还不让空白列出来不是搞笑么,再看看吧
      

  6.   

    你可以根据语句筛查,将空列的数据去除
     OleDbDataAdapter oda = new OleDbDataAdapter("select * from [" + table_name + "] where id<>'' and name<>''  ", myConnection);