備忘錄:關於.net程式連線Oracle資料庫

shanzm發表於2021-12-08

志銘-2021年12月7日 21:22:15

關於使用MSSM訪問Oracle資料庫



關於. net 程式中連線Oracle資料庫

  • 使用Oracle.ManagedDataAccess.Client.dll

    • 該程式集對.net無版本要求
    • nuget:Install-Package Oracle.ManagedDataAccess -Version 19.13.0
    • 注意我沒有使用最新21.4.0版本,該最新版本依賴另外一個類庫System.Text.Json (>= 5.0.2),而且對.net版本有要求
  • 注意:注意不要使用System.Data.OracleClient,vs會提示過時

  • 關於Oracle資料庫連線字串格式參考:

    <connectionStrings>
    	<add name="connStringForOracle" connectionString="user id=使用者ID;password=密碼;data source=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=服務IP地址)(PORT=埠號))(CONNECT_DATA=(SERVER=服務名)(SERVICE_NAME=服務名)))" />
    </connectionStrings>
    
  • 簡易的封裝一個Oracle輔助類:

    //新增名稱空間:using Oracle.ManagedDataAccess.Client;
    public class OracleHelper
    {
        private static readonly string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["connStringForOracle"].ToString();
    
    
        //建立連線物件
        public static OracleConnection GetConn()
        {
            var conn = new OracleConnection(connectionString);
            conn.Open();
            return conn;
        }
    
        //執行非查詢語句返回受影響行數
        public static int ExecuteNoQuery(string sql,CommandType type=CommandType.Text,params SqlParameter[] param)
        {
            using (var conn = GetConn())
            {
                using (OracleCommand cmd=new OracleCommand (sql,conn))
                {
                    if (null!=param)
                    {
                        cmd.Parameters.AddRange(param);
                    }
                    cmd.CommandType = type;
                    conn.Open();
                    return cmd.ExecuteNonQuery();
                }
            }
        }
    
        //返回查詢結果的第一行第一個單元格的資料
        public static object ExecuteScalar(string sql,CommandType type=CommandType.Text,params SqlParameter[] param)
        {
            using (var conn = GetConn())
            {
                using (OracleCommand cmd=new OracleCommand(sql,conn))
                {
                    if (null!=param)
                    {
                        cmd.Parameters.AddRange(param);
                    }
                    cmd.CommandType = type;
                    conn.Open();
                    return cmd.ExecuteScalar();
                }
            }
        }
    
        //返回查詢結果集
        public static DataSet GetDataSet(string sql, CommandType type = CommandType.Text, params SqlParameter[] param)
        {
            using (var conn = GetConn())
            {
                using (OracleDataAdapter adapter = new OracleDataAdapter(sql, conn))
                {
                    if (null != param)
                    {
                        adapter.SelectCommand.Parameters.AddRange(param);
                    }
                    adapter.SelectCommand.CommandType = type;
                    DataSet ds = new DataSet();
                    adapter.Fill(ds);
                    return ds;
                }
            }
        }
    }
    

相關文章