zoukankan      html  css  js  c++  java
  • C#中使用Sql对Excel条件查询

    如何在C#中实现对Excel的条件查询呢?
    在使用Sql条件语句对Excel进行查询时,遇到“至少一个参数没有被指定值”的问题,如何解决?
    使用OleDbConnection对象创建一个到Excel的连接。
    1、首先,了解一下创建连接时,字符串中的对应参数的含义: 命名空间:System.Data.OleDb
        程序集:System.Data(在 system.data.dll 中)
        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filePath + ";Extended Properties='Excel 8.0;HDR=Yes;IMEX=1'";
        OleDbConnection OleConn = new OleDbConnection(strConn);   OleConn.Open(); 参数解析:
        参数HDR的值:
        HDR=Yes,这代表第一行是标题,不做为数据使用;如果用HDR=NO,则表示第一行不是标题,做为数据来使用。系统默认的是YES。
        参数Excel 8.0对于Excel 97以上版本都用Excel 8.0 IMEX ( IMport EXport mode )设置  
        IMEX 有三种模式:   0 is Export mode   1 is Import mode  2 is Linked mode (full update capabilities) 
          我这里特别要说明的就是 IMEX 参数了,因为不同的模式代表著不同的读写行为:  
        当 IMEX=0 时为“汇出模式”,这个模式开启的 Excel 档案只能用来做“写入”用途。  
        当 IMEX=1 时为“汇入模式”,这个模式开启的 Excel 档案只能用来做“读取”用途。
        当 IMEX=2 时为“连結模式”,这个模式开启的 Excel 档案可同时支援“读取”与“写入”用途。
        意义如下 0 ---输出模式; 1---输入模式; 2----链接模式(完全更新能力)
    2、下面开始解决问题:在sql语句中,如果写法不当,就可能无法实现想要的查询结果(DataSet),出现“至少有一个参数没有被指定值”。
        String sql = "SELECT * FROM  [Sheet1$] where F1=7;"; 
         OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn);  DataSet OleDsExcel = new DataSet();   OleDaExcel.Fill(OleDsExcel, "Sheet1"); OleConn.Close();  
        注意连接中的:     Extended Properties='Excel 8.0;HDR=Yes;的写法
        如果写成 Extended Properties='Excel 8.0;HDR=Yes;' 即第一行作为列标题,可以指定字段名 例如 String sql = "SELECT * FROM  [Sheet1$] where Order=7;";  
        如果写成 Extended Properties='Excel 8.0;HDR=No;' 则只能指定F1,F2作为字段名 例如     String sql = "SELECT * FROM  [Sheet1$] where F1=7;"

    注意:(1)是否在连接中将第一行设置为列标题;
    (2)还有对应列的数据类型要一致,如果不一致也有可能导致查询结果出错。(尤其是在第一行不是列标题的时候)
    【注:本文只是针对本人遇到的问题做了整理,看到网上很多人问同样的问题,发出来供大家参考,不保证对所有的都有效】

  • 相关阅读:
    用EasyDarwin进行IPTV rtsp mpeg-ts smil流的转发和分发直播服务
    EasyDarwin添加自定义的服务模块EasyMyModule
    EasyDarwin添加自定义的服务模块EasyMyModule
    EasyDarwin Streaming Server对Task的调用方法
    EasyDarwin Streaming Server对Task的调用方法
    开源G711A/PCMA、G711U/PCMU、G726、PCM转码AAC项目EasyAACEncoder
    开源G711A/PCMA、G711U/PCMU、G726、PCM转码AAC项目EasyAACEncoder
    EasyDarwin EasyClient开源流媒体播放器,支持多窗口显示
    EasyDarwin EasyClient开源流媒体播放器,支持多窗口显示
    解决用EasyDarwin开源流媒体服务器做HLS直播时Flash Player卡住的问题
  • 原文地址:https://www.cnblogs.com/hs8888/p/6169811.html
Copyright © 2011-2022 走看看