1、關於本文sql
運行本文中的代碼,須要數據庫
1)須要手動添加引用System.Data.OracleClient函數
在代碼最前面加入這句話:using System.Data.OracleClient;工具
2)須要安裝 Instant Clientoop
安裝 Oracle Instant Client(OCI) 的步驟能夠參考這篇文章測試
注:下載32位的OCI庫,則在VS中須要選擇x86做爲目標平臺;下載64位的OCI庫,則須要選擇x64做爲目標平臺spa
2、工具類OracleHelper代碼.net
class OracleHelper { //須要 oci.dll oraociei12.dll oraons.dll /// <summary> /// 協議:默認TCP /// </summary> public static string PROTOCOL = "TCP"; /// <summary> /// 主機地址:默認171.0.0.132 /// </summary> public static string HOST = "171.0.0.132"; /// <summary> /// 端口號:默認1521 /// </summary> public static string PORT = "1521"; /// <summary> /// TNS服務名:默認TESTDB /// </summary> public static string SERVICE_NAME = "TESTDB"; /// <summary> /// 用戶名:默認NQ_MON /// </summary> public static string USER_ID = "NQ_MON"; /// <summary> /// 密碼:默認NQ_MON /// </summary> public static string PASSWORD = "NQ_MON"; /// <summary> /// 初始化工具類中各項屬性 /// </summary> /// <param name="PTC">協議:默認TCP</param> /// <param name="HST">主機地址:默認171.0.0.132</param> /// <param name="PRT">端口號:默認1521</param> /// <param name="SRV">TNS服務名:默認TESTDB</param> /// <param name="UID">用戶名:默認NQ_MON</param> /// <param name="PWD">密碼:默認NQ_MON</param> public static void InitializeConfig( string PTC = "TCP", string HST = "171.0.0.132", string PRT = "1521", string SRV = "TESTDB", string UID = "NQ_MON", string PWD = "NQ_MON") { PROTOCOL = PTC; HOST = HST; PORT = PRT; SERVICE_NAME = SRV; USER_ID = UID; PASSWORD = PWD; } /// <summary> /// 生成鏈接字符串 /// </summary> /// <param name="PROTOCOL">協議</param> /// <param name="HOST">主機地址</param> /// <param name="PORT">端口號</param> /// <param name="SERVICE_NAME">TNS服務名</param> /// <param name="USER_ID">用戶名</param> /// <param name="PASSWORD">登陸口令</param> /// <returns></returns> public static string GetConnectionString() { return string.Format( "DATA SOURCE= " + " (DESCRIPTION= " + " (ADDRESS_LIST= " + " (ADDRESS= " + " (PROTOCOL={0}) " + " (HOST={1}) " + " (PORT={2}) " + " ) " + " ) " + " (CONNECT_DATA= " + " (SERVICE_NAME={3}) " + " ) " + " ); " + "PERSIST SECURITY INFO=TRUE; " + "USER ID={4}; " + "PASSWORD={5} ", PROTOCOL, HOST, PORT, SERVICE_NAME, USER_ID, PASSWORD); } /// <summary> /// 向數據庫中執行命令 /// </summary> /// <param name="sqlExecute">無返回值SQL語句</param> /// <returns>SQL語句影響的行數</returns> public static int ExecuteCommand(string sqlExecute) { int lineschanged = 0; //生成鏈接字符串 string conn = GetConnectionString(); //讀取數據 using (OracleConnection oc = new OracleConnection(conn)) { try { //打開鏈接 oc.Open(); OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = sqlExecute; lineschanged = cmd.ExecuteNonQuery(); } catch (Exception ex) { //輸出異常後拋出 Console.WriteLine("Function ExecuteCommand: " + ex.Message); throw new Exception(ex.Message); } finally { //關閉鏈接 oc.Close(); } } return lineschanged; } /// <summary> /// 從數據庫中查詢數據 /// </summary> /// <param name="sqlSearch">查詢用SQL語句</param> /// <returns></returns> public static System.Data.DataTable SearchCommand(string sqlSearch) { //返回的DataTable System.Data.DataTable dt = new System.Data.DataTable(); //生成鏈接字符串 string conn = GetConnectionString(); //讀取數據 using (OracleConnection oc = new OracleConnection(conn)) { try { //打開鏈接 oc.Open(); OracleCommand cmd = oc.CreateCommand(); cmd.CommandText = sqlSearch; OracleDataReader odr = cmd.ExecuteReader(); //讀取列信息 for (int i = 0; i < odr.FieldCount; i++) { dt.Columns.Add(odr.GetName(i)); } //讀取各行存入到DataTable中 while (odr.Read()) { string[] s = new string[odr.FieldCount]; for (int i = 0; i < odr.FieldCount; i++) { s[i] = odr.GetValue(i).ToString(); } dt.Rows.Add(s); } } catch (Exception ex) { //輸出異常後拋出 Console.WriteLine("Function SearchCommand: " + ex.Message); throw new Exception(ex.Message); } finally { //關閉鏈接 oc.Close(); } } return dt; } }
3、Main函數調用示例線程
namespace OracleTest { class Program { /// <summary> /// 執行查詢SQL語句示例 /// </summary> public static void SearchTest() { //查詢內容 Console.WriteLine("執行SEARCH語句"); System.Data.DataTable dt = OracleHelper.SearchCommand( "SELECT CURR_DATE, CURR_TIME FROM MONCRITEVENT WHERE ROWNUM <= 10"); //輸出查詢結果 Console.WriteLine("輸出查詢結果"); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { Console.Write(dt.Rows[i][j].ToString()); Console.Write('\t'); } Console.WriteLine(); } } /// <summary> /// 執行非查詢SQL語句示例 /// </summary> public static void CommandTest() { //執行SQL語句 Console.WriteLine("執行UPDATE語句"); int lineschanged = OracleHelper.ExecuteCommand( "UPDATE MONCRITEVENT SET CURR_DATE = 9999 WHERE CURR_DATE = 9999"); Console.WriteLine("受影響的行數:" + lineschanged); } /// <summary> /// 循環發送Search語句並返回 /// </summary> /// <param name="second">每次收發數據間隔時間</param> public static void SearchLoopTest(object second) { while (true) { SearchTest(); System.Threading.Thread.Sleep(int.Parse(second.ToString())); } } static void Main(string[] args) { SearchTest(); //執行查詢SQL語句示例 Console.WriteLine("--------"); CommandTest(); //執行非查詢SQL語句示例 Console.WriteLine("--------"); //壓力測試,執行時能夠打開任務管理器輔助檢測程序運行情況 //每0.2秒發送一次,分10個線程發送 /* (new System.Threading.Thread(SearchLoopTest)).Start(2000); //1 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //2 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //3 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //4 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //5 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //6 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //7 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //8 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //9 System.Threading.Thread.Sleep(200); (new System.Threading.Thread(SearchLoopTest)).Start(2000); //10 * */ Console.ReadLine(); } } }
4、運行截圖code
END