程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase教程 >> C#通過OleDb讀寫excel表格幾個要點

C#通過OleDb讀寫excel表格幾個要點

編輯:SyBase教程

C#通過OleDb讀寫excel表格幾個要點


1,OleDbConnection 的連接字符串:

0ffice 97-2003 :

strConnection = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR={1};IMEX={2:D}\";", ExcelFilePath, HDR, IMEX);
//HDR=No 表示ADO將不把你Excel文件的第一行作為字段名(此時使用默認字段名:F1,F2。。)
//IMEX= 0寫入模式,1讀取模式,2連接讀寫模式(效率不高),"IMEX=1;" 則始終將“互混”數據列作為文本讀取

office2007:

strConnection = string.Format("Provider==Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR={1};IMEX={2:D}\";", ExcelFilePath, HDR, IMEX);
 

2,建立連接並打開:

try
{
Connection = new OleDbConnection(strConnection);

/* 特別說明: 在C++中建立連接後,連接就可以直接使用。 在C#中,連接可以使用 datatable 等操作,但是連接此時處於關閉狀態。//*/

Connection.Open();

/* 特別說明,如果沒有這一句,連接處於關閉狀態,執行sql語句會提示錯誤:連接關閉不可用。我用一天的時間才研究出來

這個貌似 MSDN 和 網上都沒有相關資料和說明,我一直奇怪,建立連接都沒任何錯誤,datatable.fill()都沒問題,為何執行sql語句連接處於關閉不可用呢?

大部分情況大量數據回寫導出到EXCEL表格,都會是SQL數據庫,可以用 SqlBulkCopy ,只是我的數據庫卻是 SqlCe,不支持SqlBulkCopy

所以,只能自己做線程執行插入語句。

貌似在 C++ 中,建立連接後,從來沒有自己手動去Open,,,,,,,,,,,,,

//*/

}

catch (OleDbException ex )
{
}

3,執行sql語句:

try
{
OleDbCommand comm = new OleDbCommand(sqlstr, Connection);

result = comm.ExecuteNonQuery(); //返回受影響的數據行數量。

}
catch (OleDbException e)
{
}

4,excel表格sql語句書寫

string sqlstr="select F1,F2 from [Sheet1$] ";//注意表名稱[] 和 $ 都不能少了。

5,讀取的時候,部分數據丟失,或者錯誤。

excel默認掃描前8行數據,以便自動識別字段數據類型,故,後面如果字段類型不符合,或者字段超長度,就會出現丟失。

1,IMEX=1 連接的時候設為讀取模式,將數字和字符始終做字符處理。

2,修改注冊表,將行數改更大 0 - 16;0代表整個表格。

TypeGuessRows 設置為 0,,注意表格如果較大,10000行,改成0,則需要考慮性能和效率問題。
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel]
Windows 7 的注冊表項目
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Excel

3,修改注冊表腳本

@echo off reg add HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel /v TypeGuessRows /t REG_DWORD /d 0 /f
@echo off reg add "HKLM\SOFTWARE\Microsoft\Office\12.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f
@echo off reg add "HKLM\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Excel" /v TypeGuessRows /t REG_DWORD /d 0 /f

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved