[個人筆記] 透過ADO.NET存取使用EXCEL
【建立資料表】
string tConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Book1.xls;Extended Properties=""Excel 8.0;HDR=YES;""";
DbProviderFactory tFactory = DbProviderFactories.GetFactory("System.Data.OleDb");
using (DbConnection tConnection = tFactory.CreateConnection())
{
tConnection.ConnectionString = tConnectionString;
using (DbCommand tCommand = tConnection.CreateCommand())
{
tCommand.CommandText = "CREATE TABLE NewSheet (Field1 char(10), Field2 float, Field3 date)";
tConnection.Open();
tCommand.ExecuteNonQuery();
}
}
這邊可以看得出來Create Table的時候,指令跟一般SQL幾乎沒兩樣,不過要注意兩點:
1. 資料欄位名稱不得包含有特殊EXCEL關鍵字,例如:Count
2. 資料欄位的格式要以Excel的資料格式為主,例如string或text這類的,在Excel裡面就設定char(255),這部分要小心測試。
參考資料:
http://www.eggheadcafe.com/searchform.aspx?search=Excel
Create table in Excel using CSharp ADO.NET
【讀取查詢Excel】
string tConnString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Excel.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";";
DataTable tDataTable = new DataTable();
OleDbConnection tConn = new OleDbConnection(tConnString);
OleDbDataAdapter tAdapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", tConn);
tAdapter.Fill(tDataTable);
*記得Sheet1要改成正確的頁籤名稱
*HDR=Yes表示資料列第一個Row包含了Column名稱,否則設定HDR=No
參考資料:
Quirky SELECT from Excel file via OleDbDataAdapter method (C#)
=。=。=。=。=。=。=。=。=。=。
如果執行到Connection Open時出現錯誤訊息:
'Microsoft.ACE.OLEDB.12.0' 提供者並未登錄於本機電腦上。
或者
'Microsoft.Jet.OLEDB.4.0' 提供者並未登錄於本機電腦上。
關於這個問題可以參考安裝以下更新:
Microsoft Access Database Engine
如果持續不能執行過的話,試試看把程式編譯改為32bit,因為在64bit系統上,並不支援OLEDB,請參考:
20100118 Jet.OLEDB on x64 OS IIS
其他可以參考的語法資料: