由于項(xiàng)目需要,,現(xiàn)需要向遠(yuǎn)程Oracle數(shù)據(jù)庫插入數(shù)據(jù),。由于后期可能無法在部署程序的電腦上安裝oracle客戶端,網(wǎng)上也有一些解決辦法,,通常是要下載對(duì)應(yīng)版本的Oracle Instant Client,,將訪問Oracle需要的部分Dll文件拷貝到客戶端本地,然后通過配置環(huán)境變量或修改注冊(cè)表的方式,,來達(dá)到快速安裝客戶端的目的,,如果后期部署程序在虛擬空間時(shí),配置環(huán)境變量或修改注冊(cè)表或許不可行,。這里提供一種簡(jiǎn)單,、無需安裝和多余配置的方法,適用于.NET C#,。 本方法通過程序內(nèi)集成Oracle客戶端,,下面是這種方法的具體實(shí)現(xiàn): 1.從Oracle官網(wǎng)上下載對(duì)應(yīng)版本的Oracle Instant Client,,以下是官網(wǎng)鏈接http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html 但是由于我下載其中的Win32版本的文件不全,因此又通過查找另外下載了一些文件,,現(xiàn)已把我在32位機(jī)器上測(cè)試遠(yuǎn)程連接Oracle 10g數(shù)據(jù)庫通過的完整文件上傳到csdn,,鏈接為http://download.csdn.net/detail/xiaohu_2012/5999699,壓縮包包括如下文件: classes12.jar oci.dll 其中OraOps11w.dll與Oracle.DataAccess.dll需要配套,。 2.在你的工程目錄里新建一個(gè)文件夾Oracle(名字和位置隨便定),,將上述文件拷貝到里邊,并在Visual Studio中添加這個(gè)文件夾及文件們,。保證可以在解決方案中看到它們。 3.在Visual Studio IDE 的解決方案資源管理器中,,打開Oracle文件夾,,選中里邊所有的文件,在“屬性”“復(fù)制到輸出目錄”里設(shè)置“如果較新則復(fù)制”,,這樣在編譯或者發(fā)布程序時(shí),,Oracle文件夾會(huì)隨著發(fā)布到exe所在的地方,部署的時(shí)候就不會(huì)出現(xiàn)找不到Oracle庫的情況,。 4.按照網(wǎng)上的大多數(shù)教程,,這個(gè)時(shí)候就需要配置Windows環(huán)境變量了。其實(shí)這一步并不是必須的,,因?yàn)榭紤]到不同的客戶環(huán)境,,有可能用戶沒有權(quán)限在他的計(jì)算機(jī)上操作這些,那么我們可以把設(shè)置Oracle環(huán)境變量放到程序里來做,。這就需要在使用Oracle連接之前,,添加如下代碼: //取得oracle驅(qū)動(dòng)文件夾的位置,也就是放oci.dll的地方 string oraclePath = System.Windows.Forms.Application.StartupPath + @'\oracle'; //設(shè)置環(huán)境變量“PATH”,,寫入oracle驅(qū)動(dòng)所在的文件夾 //第三個(gè)參數(shù)表示這個(gè)PATH只在當(dāng)前進(jìn)程起作用,,不會(huì)修改電腦本身。 Environment.SetEnvironmentVariable('PATH', oraclePath,EnvironmentVariableTarget.Process); //設(shè)置Oracle在通訊過程中使用的語言和字符集,。 //我的項(xiàng)目用的是上面的字符集,,對(duì)應(yīng)到你的項(xiàng)目,可用SQL語句去oracle數(shù)據(jù)庫中查詢,。 //這個(gè)語言和字符集一定要和服務(wù)器一致,,否則可能會(huì)出現(xiàn)亂碼甚至無法連接。 Environment.SetEnvironmentVariable('NLS_LANG', 'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', EnvironmentVariableTarget.Process);
補(bǔ)充說明,,可以用以下SQL語句查詢字符集:
select userenv('language') from dual;查詢服務(wù)端字符集,用來設(shè)置上面的參數(shù),。 select * from nls_database_parameters;//服務(wù)器字符集 select * from nls_instance_parameters;//ora文件定義字符集 select * from nls_session_parameters;//會(huì)話字符集
5.理論上,經(jīng)過上面的設(shè)置,,你的程序就可以使用內(nèi)置到exe目錄下的Oracle驅(qū)動(dòng)了,,這里要注意的還有就是連接數(shù)據(jù)庫的方式,,上面的修改并不能保證你可以使用tns名來連接,因此連接字符串要做如下修改: 'Persist Security Info=True;User ID=數(shù)據(jù)庫用戶名;Password=密碼;Unicode=True;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服務(wù)器IP地址)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=服務(wù)器上全局?jǐn)?shù)據(jù)庫的服務(wù)名)))' 這個(gè)主要是把'Data Source'這部分直接用TCP/IP字符串方式替換了(通常Data Source是寫tns名稱的)
6.Ok,,運(yùn)行程序,,連接成功! |
|