代码如下:
string myString = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =  " + savePath + fileName + ";Extended Properties=Excel 8.0";   
OleDbConnection oconn = new OleDbConnection(myString);   
oconn.Open();   
DataSet ds = new DataSet();   
OleDbDataAdapter oda = new OleDbDataAdapter("select * from [Sheet1$]", oconn);   
oda.Fill(ds);   
oconn.Close();
问题1:Excel表中只有1条数据,导入Sql后有很多的空白行,原因是Excel滴问题,应该是曾经写过 24 行数据,后来删除了 22 行,而Excel会自动记录最后数据行的位置(类似一个单向指针),怎么过滤这些空白行
select * from [Sheet1$] where [A] <> '' 这样的写法好像不对(A为Excel列名),正确的写法应该怎样写?问题2:怎么防止重复导入的数据?
 

解决方案 »

  1.   

    string strConn = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source=" + filenameurl + ";Extended Properties='Excel 8.0; HDR=YES; IMEX=1'";OleDbConnection conn = new OleDbConnection(strConn);
    conn.Open();
    DataSet ds = new DataSet();
    OleDbDataAdapter odda = new OleDbDataAdapter("select * from [" + sheet + "]", conn);
    odda.Fill(ds);
    return ds;你看看有啥不同,以前做过,,,
      

  2.   

    1、要不检查下 Excel 格式,把Excel表格式全部都转行为 文本格式。
    2、选中Excel最后多出来的空行,大概选中100多行,删除掉空白行,而不是清空。代码判断下空行
      

  3.   

    直接在SQL里写不就好了openrowset可以直接取excel里的数据,不用.net也行的。至于空白,也在导入sql后删掉不就行了。
      

  4.   

    重新建excel复制数据到新excel
    DataSet 删除数据
    打开excel遍历判断是否为空
      

  5.   

    先遍历下Excel中数据,判断是否为空,为空就移除·
      

  6.   

    我觉得不需要在导入前判断。
    把空白行也一起导入到 DataTable 中。
    然后,对DataTable进行过滤,就可以了啊。
      

  7.   


    这个建议很好,但我想如果在查询Excel的时候就过滤掉,效率应该会高一些
      

  8.   

    回答你的显示的很多空行的问题,我以前遇到过。
    你的excel里面,以前有24行数据,应该是删除的时候只是把下面的行的数据值删除了,而行没有删除,
    你试一试把下面的那20多行整个区域都删除了,在测试看看!
      

  9.   

    foreach时 
    if (dr["商品编号"].ToString().Trim() == string.Empty)
                {
                    continue;
                }