1. 程式人生 > >C# 連線Oracle資料庫

C# 連線Oracle資料庫

資料庫 訪問

using System;
using System.Data;
using System.Collections.Generic;
using Oracle.ManagedDataAccess.Client;

namespace myTool
{
    /// <summary>  
    /// 單例模式基類 
    /// </summary>  
    public class SingleTon<T> where T : class, new()
    {
        private static volatile T _instance;
        private static readonly object _lock = new object();

        /// <summary>  
        ///   
        /// </summary>  
        /// <returns></returns>  
        public static T Instance()
        {
            if (_instance == null)
            {
                lock (_lock)
                {
                    if (_instance == null)
                    {
                        _instance = new T();
                    }
                }
            }
            return _instance;
        }
    }

    /// <summary>
    /// Oracle引數化方法
    /// </summary>
    public class OracleSqlHelperParams : List<OracleParameter>
    {
        public void Add(string name, dynamic val)
        {
            base.Add(new OracleParameter(name, val));
        }
    }

    /// <summary>
    /// Oracle資料庫操作類
    /// </summary>
    public class OracleSqlHelper : SingleTon<OracleSqlHelper>
    {
        private readonly string _conStr = @"DATA SOURCE=ip:port/db;PASSWORD=passwd;USER ID=account;PERSIST SECURITY INFO=True;Connection Timeout=9000";

        public int ExecuteSql(string sql, List<OracleParameter> cmdParms = null)
        {
            int result = -1;
            if (sql.Trim() != "")
            {
                using (OracleConnection conn = new OracleConnection(_conStr))
                {
                    conn.Open();
                    using (OracleTransaction tran = conn.BeginTransaction())//開啟事務
                    {
                        try
                        {
                            using (OracleCommand cmd = conn.CreateCommand())
                            {
                                cmd.BindByName = true;
                                cmd.Transaction = tran;
                                cmd.CommandText = sql;
                                cmd.CommandTimeout = 9000;

                                //sql 引數化
                                if (cmdParms != null)
                                {
                                    foreach (OracleParameter parm in cmdParms)
                                    {
                                        if (sql.Contains(parm.ParameterName))
                                        {
                                            cmd.Parameters.Add(parm);
                                        }
                                    }
                                }

                                result = cmd.ExecuteNonQuery();
                                tran.Commit();

                                cmd.Parameters.Clear();
                            }
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            throw ex;
                        }
                    }
                }
            }
            return result;
        }

        public DataTable GetDataTable(string sql, List<OracleParameter> cmdParms = null)
        {
            DataTable result = new DataTable();
            if (sql.Trim() != "")
            {
                using (OracleConnection conn = new OracleConnection(_conStr))
                {
                    conn.Open();
                    using (OracleTransaction tran = conn.BeginTransaction())//開啟事務
                    {
                        try
                        {
                            using (OracleCommand cmd = conn.CreateCommand())
                            {
                                cmd.BindByName = true;
                                cmd.Transaction = tran;
                                cmd.CommandText = sql;
                                cmd.CommandTimeout = 9000;

                                //sql 引數化
                                if (cmdParms != null)
                                {
                                    foreach (OracleParameter parm in cmdParms)
                                    {
                                        if (sql.Contains(parm.ParameterName))
                                        {
                                            cmd.Parameters.Add(parm);
                                        }
                                    }
                                }

                                OracleDataAdapter adp = new OracleDataAdapter(cmd);
                                DataSet dst = new DataSet();
                                adp.Fill(dst);
                                result = dst.Tables[0];

                                cmd.Parameters.Clear();
                            }
                        }
                        catch (Exception ex)
                        {
                            tran.Rollback();
                            throw ex;
                        }
                    }
                }
            }
            return result;
        }

        public DateTime GetDBDateTime()
        {
            DataTable dt = OracleSqlHelper.Instance().GetDataTable(@"SELECT SYSDATE FROM DUAL");
            if (dt.Rows.Count != 0)
            {
                return Convert.ToDateTime(dt.Rows[0][0]);
            }
            return DateTime.Now;
        }
    }
}

呼叫方法

            OracleSqlHelperParams cmdParms = new OracleSqlHelperParams();
            cmdParms.Add(":USER_MODIFIED", "CCCCC");
            cmdParms.Add(":MO_NAME", "LH1F本15013003ND1");
            cmdParms.Add(":INV_ORG_ID", 200124);
            cmdParms.Add(":STATE", "A");
            cmdParms.Add(":DATETIME_MODIFIED", OracleSqlHelper.Instance().GetDBDateTime());

            DataTable test01 = OracleSqlHelper.Instance().GetDataTable(@"SELECT *
                FROM SFC_MO 
                WHERE INV_ORG_ID = :INV_ORG_ID 
                AND   MO_NAME    = :MO_NAME
                AND   STATE      = :STATE
            ", cmdParms);

            int test02 = OracleSqlHelper.Instance().ExecuteSql(@"UPDATE 
                SFC_MO SET USER_MODIFIED = :USER_MODIFIED,
                DATETIME_MODIFIED = :DATETIME_MODIFIED
                WHERE INV_ORG_ID = :INV_ORG_ID 
                AND   MO_NAME    = :MO_NAME
                AND   STATE      = :STATE", cmdParms);