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