C# 連線Oracle資料庫
阿新 • • 發佈:2019-02-06
資料庫 訪問
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);