[個人筆記] 透過ADO.NET存取使用EXCEL

  • 10942
  • 0
  • SQL
  • 2012-12-07

[個人筆記] 透過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

[轉載]在64 bit os上的OLE DB 資料庫連線

 

 

 

其他可以參考的語法資料:

C# Excel Tutorial