当前位置:Gxlcms > 数据库问题 > C#通过OleDb读写excel表格几个要点

C#通过OleDb读写excel表格几个要点

时间:2021-07-01 10:21:17 帮助过:33人阅读

  特别说明: 在C++中建立连接后,连接就可以直接使用。  在C#中,连接可以使用 datatable 等操作,但是连接此时处于关闭状态。//*/

               Connection.Open();   

              /*  特别说明,如果没有这一句,连接处于关闭状态,执行sql语句会提示错误:连接关闭不可用。我用一天的时间才研究出来 

                   这个貌似 MSDN 和 网上都没有相关资料和说明,我一直奇怪,建立连接都没任何错误,datatable.fill()都没问题,为何执行sql语句连接处于关闭不可用呢?

                   大部分情况大量数据回写导出到EXCEL表格,都会是SQL数据库,可以用 SqlBulkCopy ,只是我的数据库却是 SqlCe,不支持SqlBulkCopy 

                   所以,只能自己做线程执行插入语句。

                   貌似在 C++ 中,建立连接后,从来没有自己手动去Open,,,,,,,,,,,,,

              //*/ 

            }

            catch (OleDbException ex )
            {
            }

3,执行sql语句:

         try
            {
                OleDbCommand comm = new OleDbCommand(sqlstr, Connection);

                result = comm.ExecuteNonQuery(); //返回受影响的数据行数量。

            }
            catch (OleDbException e)
            {
            }

4,excel表格sql语句书写

       string sqlstr="select  F1,F2  from [Sheet1$] ";//注意表名称[] 和 $ 都不能少了。

5,读取的时候,部分数据丢失,或者错误。

      excel默认扫描前8行数据,以便自动识别字段数据类型,故,后面如果字段类型不符合,或者字段超长度,就会出现丢失。

      1,IMEX=1 连接的时候设为读取模式,将数字和字符始终做字符处理。

      2,修改注册表,将行数改更大 0 - 16;0代表整个表格。

             TypeGuessRows 设置为 0,,注意表格如果较大,10000行,改成0,则需要考虑性能和效率问题。
             [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] 
             Windows 7 的注册表项目
             HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel

       3,修改注册表脚本

           @echo off  reg add HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel /v TypeGuessRows /t REG_DWORD /d 0 /f 
           @echo off  reg add "HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f 
           @echo off  reg add "HKLM\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f 

C#通过OleDb读写excel表格几个要点

标签:c#   excel   oledb   

人气教程排行