C#連線Oracle資料庫通過儲存過程操作資料庫
之前筆者一直用C#連線SQL Server資料庫。近期由於工作需要,需要用C#連線Oracle資料庫,並且要通過儲存過程,來操作資料庫中的資料,實現增、刪、改、查(有分頁功能)功能。並且,為了今後對資料庫擴充套件方便,對現在的程式碼改動最小的情況下,實現資料庫的平穩切換,必須採用OleDB的方式連線Oracle資料庫、操作儲存過程。
首先去網上搜索資料,確實找到了很多C#連線Oracle資料庫,和用儲存過程操作資料庫的資料。但是仔細研究發現,清一色的全部是使用OracleClient(Oracle專用驅動)的方式對Oracle資料庫及儲存過程進行操作。沒辦法,只能自己動手、豐衣足食。經過3天左右的辛苦努力,終於實現了用
用OleDB操作Oracle儲存過程,有幾個難題;
1、返回記錄集,也就是Oracle的遊標;
2、對於某些特殊的應用,有可能需要返回多個記錄集;
3、將儲存過程中的資料,通過輸出引數的形式返回給程式(因為要做分頁,需要將記錄數輸出來);
4、對Text大文字欄位(對應Oracle的資料型別是CLOB)的增、改、查操作;
5、對特殊字元的查詢,如查詢文字中是否包含“%”、“/”、“’”、“_”等符號;
接下來,主要針對以上問題,進行介紹;
一、連線Oracle資料庫
連線Oracle資料庫,主要有
經過在網上查資料,說是Oracle的資料庫驅動,中文可能會出現亂碼;微軟的驅動雖然中文沒有亂碼,但是對於CLOB型別的欄位,無法操作;經過對比,決定使用Oracle的資料庫驅動。因為應用中,肯定要有CLOB型別的欄位操作;但是經過測試,未發現中文出現亂碼的情況;
ØOracle資料庫連線方式:
Provider=OraOLEDB.Oracle.1;User ID=username;password=dbpassword;Data Source=databasename;Persist Security Info=True;Extended Properties='PLSQLRSet=1';
Extended Properties='PLSQLRSet=1'
注意:上面這個屬性一定要帶上,否則無法操作有返回遊標引數的儲存過程;
Ø微軟的資料庫連線方式:
Provider=MSDAORA.1;Data Source=allrun;User ID=allrunadmin;Password=allrun;Persist Security Info=True;
建議使用Oracle資料庫的連線方式。
二、儲存過程,返回多個記錄集
Oracle儲存過程指令碼:
C#程式操作儲存過程:
因為主要是介紹操作資料庫儲存過程的方法,如何連線資料庫請自己寫;
一、對CLOB欄位的增、改、查;
假設表名為:DESKTOP_PAGE,包含2個欄位:USERCODE(普通字串)、CONTENT(CLOB型別)
Oracle儲存過程指令碼為:
四、對特殊字元的查詢,如查詢文字中是否包含“%”、“/”、“’”、“_”等符號;
Oracle指令碼:
以上是筆者操作Oracle資料庫總結出來的一些經驗,然後對大家有所幫助。s