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)還有對應列的數據類型要一致,如果不一致也有可能導致查詢結果出錯。(尤其是在第一行不是列標題的時候)
【注:本文只是針對本人遇到的問題做了整理,看到網上很多人問同樣的問題,發出來供大家參考,不保證對所有的都有效】


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM