개발(IT)/C#(VisualStudio)

[c#] 오라클(Oracle) 연동 Helper

isony 2023. 9. 23. 16:52
반응형

1. [c#] 오라클(Oracle) 연동 Helper

- C# 으로 개발을 위해서 가장 많이 사용하면서 꼭필요하신게 연동입니다.

- 가장 많이 사용하기도 하지만 처음 한번만 셋팅해두면 신경않쓰고 호출해서 사용하면 편하기때문에 많이들 가지고 있을거라고 생각됩니다.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Data.OracleClient;
using static DevExpress.XtraEditors.Mask.MaskSettings;

namespace factory.Database
{
    public static class DBHelper
    {
        private static OracleConnection dbConn = null;
        private static string dbConnString;

        public static void Init()
        {
            dbConnString =
                $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={전역변수.gv_ora_svr})(PORT={전역변수.gv_ora_port})))" +
                $"(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={전역변수.gv_ora_tns})));" +
                $"User Id={전역변수.gv_ora_user};Password={전역변수.gv_ora_pass};";
        }

        public static void Init(string hostName,
                                string user,
                                string pass,
                                string dbase,
                                string port,
                                bool perfCounter = false)
        {
            dbConnString =
                $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={hostName})(PORT={port})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={dbase})));User Id={user};Password={pass};";
        }

        public static DataTable executeProcedure(string PROC_NAME, params object[] parameters)
        {
            try
            {
                if (parameters.Length % 2 != 0)
                    throw new ArgumentException("Wrong number of parameters sent to procedure. Expected an even number.");
                DataTable a = new DataTable();
                List<OracleParameter> filters = new List<OracleParameter>();

                string query = "EXEC " + PROC_NAME;

                bool first = true;
                for (int i = 0; i < parameters.Length; i += 2)
                {
                    filters.Add(new OracleParameter(parameters[i] as string, parameters[i + 1]));
                    query += (first ? " " : ", ") + ((string)parameters[i]);
                    first = false;
                }

                return Query(query, filters);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw ex;
            }
        }

        public static int nonProcedure(String query, params object[] parameters)
        {
            try
            {
                if (parameters.Length % 2 != 0)
                    throw new ArgumentException("Wrong number of parameters sent to procedure. Expected an even number.");
                List<OracleParameter> filters = new List<OracleParameter>();

                for (int i = 0; i < parameters.Length; i += 2)
                    filters.Add(new OracleParameter(parameters[i] as string, parameters[i + 1]));

                using (dbConn = new OracleConnection(dbConnString))
                {
                    OracleCommand command = new OracleCommand(query, dbConn);

                    try
                    {
                        dbConn.Open();
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.AddRange(filters.ToArray());
                        return command.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        System.Windows.Forms.MessageBox.Show(ex.Message);
                        throw ex;
                    }
                    finally
                    {
                        if (dbConn != null)
                            dbConn.Close();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw ex;
            }
        }

        public static DataTable executeQuery(string query, params object[] parameters)
        {
            try
            {
                if (parameters.Length % 2 != 0)
                    throw new ArgumentException("Wrong number of parameters sent to procedure. Expected an even number.");
                List<OracleParameter> filters = new List<OracleParameter>();

                for (int i = 0; i < parameters.Length; i += 2)
                    filters.Add(new OracleParameter(parameters[i] as string, parameters[i + 1]));

                return Query(query, filters);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw ex;
            }
        }

        public static string executeQuery1(string query, params object[] parameters)
        {
            try
            {
                if (parameters.Length % 2 != 0)
                    throw new ArgumentException("Wrong number of parameters sent to procedure. Expected an even number.");
                List<OracleParameter> filters = new List<OracleParameter>();

                for (int i = 0; i < parameters.Length; i += 2)
                    filters.Add(new OracleParameter(parameters[i] as string, parameters[i + 1]));

                return Query1(query, filters);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw ex;
            }
        }

        public static int executeNonQuery(string query, params object[] parameters)
        {
            try
            {
                if (parameters.Length % 2 != 0)
                    throw new ArgumentException("Wrong number of parameters sent to procedure. Expected an even number.");
                List<OracleParameter> filters = new List<OracleParameter>();

                for (int i = 0; i < parameters.Length; i += 2)
                    filters.Add(new OracleParameter(parameters[i] as string, parameters[i + 1]));

                return NonQuery(query, filters);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw ex;
            }
        }

        public static object executeScalar(string query, params object[] parameters)
        {
            try
            {
                if (parameters.Length % 2 != 0)
                    throw new ArgumentException("Wrong number of parameters sent to query. Expected an even number.");
                List<OracleParameter> filters = new List<OracleParameter>();

                for (int i = 0; i < parameters.Length; i += 2)
                    filters.Add(new OracleParameter(parameters[i] as string, parameters[i + 1]));

                return Scalar(query, filters);
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message);
                throw ex;
            }
        }

        #region Private Methods
        private static DataTable Query(String query, IList<OracleParameter> parametros)
        {
            DataTable data = new DataTable();

            using (dbConn = new OracleConnection(dbConnString))
            {
                OracleCommand command = new OracleCommand(query, dbConn);

                try
                {
                    dbConn.Open();
                    command.Parameters.AddRange(parametros.ToArray());

                    using (OracleDataReader reader = command.ExecuteReader())
                    {
                        data.Load(reader);
                    }

                    return data;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    throw ex;
                }
                finally
                {
                    if (dbConn != null)
                        dbConn.Close();
                }
            }
        }

        private static string Query1(String query, IList<OracleParameter> parametros)
        {
            string rtnData = "";

            using (dbConn = new OracleConnection(dbConnString))
            {
                OracleCommand command = new OracleCommand(query, dbConn);

                try
                {
                    dbConn.Open();
                    command.Parameters.AddRange(parametros.ToArray());

                    using (OracleDataReader reader = command.ExecuteReader())
                    {
                        reader.Read();
                        rtnData = reader.GetString(0);
                    }

                    return rtnData;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    throw ex;
                }
                finally
                {
                    if (dbConn != null)
                        dbConn.Close();
                }
            }
        }

        private static int NonQuery(string query, IList<OracleParameter> parametros)
        {
            using (dbConn = new OracleConnection(dbConnString))
            {
                OracleCommand command = new OracleCommand(query, dbConn);

                try
                {
                    dbConn.Open();
                    command.Parameters.AddRange(parametros.ToArray());
                    return command.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    throw ex;
                }
                finally
                {
                    if (dbConn != null)
                        dbConn.Close();
                }
            }
        }

        private static object Scalar(string query, List<OracleParameter> parametros)
        {
            using (dbConn = new OracleConnection(dbConnString))
            {
                OracleCommand command = new OracleCommand(query, dbConn);

                try
                {
                    dbConn.Open();
                    command.Parameters.AddRange(parametros.ToArray());
                    return command.ExecuteScalar();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    System.Windows.Forms.MessageBox.Show(ex.Message);
                    throw ex;
                }
                finally
                {
                    if (dbConn != null)
                        dbConn.Close();
                }
            }
        }
        #endregion
    }
}

 

2. 호출방법

- 선언

using factory.Database;

 

- 호출

    string query = "select 컬럼1, 컬럼2, 컬럼3 from 테이블" +

              " where 컬럼1 = :ag_code and 컬럼2 = :ag_status";
    object[] param = { "ag_code", 값1, "ag_status", 값2 };

 

    DBHelper.Init();
    DataTable retData = DBHelper.executeQuery(query, param);

 

3. 파일첨부

DBHelper.cs
0.01MB

반응형

'개발(IT) > C#(VisualStudio)' 카테고리의 다른 글

[c#] MS-SQL 연동 Helper  (0) 2023.09.23
자동 업그레이드 다운로드 (Auto Checker)  (0) 2023.09.14
Visual Studio 2022 설치 순서  (0) 2023.08.23