C# 一個操做Oracle的簡易工具類(經過System.Data.OracleClient)

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

相關文章
相關標籤/搜索