所谓的潇洒

导航

OracleDBHeper

1.管理NuGet安装Oracle.ManagedDataAccess

2.下载Omu.ValueInjecter.dll

using System;
using Oracle.ManagedDataAccess;
using Oracle.ManagedDataAccess.Types;
using Oracle.ManagedDataAccess.Client;
using System.Data;
using System.Collections.Generic;
using Omu.ValueInjecter;
using Common.Data;

namespace Common.DataBase
{
    public class OracleDBHelper
    {
        public static string connStr = string.Empty;
        public static void IniConnStr(string host, int port, string serverName, string userName, string pwd)
        {
            connStr = $"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST={host})(PORT={port})))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME={serverName})));User Id={userName};Password={pwd};";
        }

        public static DataTable GetTable(string sql)
        {
            DataTable OutDataTable = new DataTable();
            DataRow dataRow;
            using (OracleConnection con = new OracleConnection(connStr))
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);

                string data = string.Empty;
                OracleDataReader daReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                for (int j = 0; j < daReader.FieldCount; j++)
                {
                    OutDataTable.Columns.Add(daReader.GetName(j));
                }
                while (daReader.Read())
                {
                    dataRow = OutDataTable.NewRow();
                    for (int j = 0; j < daReader.FieldCount; j++)
                    {
                        data = daReader[j].ToString();
                        dataRow[j] = data;
                    }
                    OutDataTable.Rows.Add(dataRow);
                }

                return OutDataTable;
            }
        }

        public static IEnumerable<T> GetEnumerable<T>(string sql) where T : new()
        {
            using (OracleConnection con = new OracleConnection(connStr))
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                OracleDataReader daReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                while (daReader.Read())
                {
                    var o = new T();
                    o.InjectFrom<ReaderInjection>(daReader);
                    yield return o;
                }
            }
        }

        public static object ExecuteScalar(string sql)
        {
            using (OracleConnection con = new OracleConnection(connStr))
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                return cmd.ExecuteScalar();
            }
        }

        public static void ExecuteNoneQuery(string sql)
        {
            using (OracleConnection con = new OracleConnection(connStr))
            {
                con.Open();
                OracleCommand cmd = new OracleCommand(sql, con);
                cmd.ExecuteNonQuery();
            }
        }
    }
}

以上代码中用到的ReaderInjection的代码如下

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using Omu.ValueInjecter;

namespace Common.Data
{
    public class ReaderInjection : KnownSourceValueInjection<IDataReader>
    {
        protected override void Inject(IDataReader source, object target)
        {
            for (var i = 0; i < source.FieldCount; i++)
            {
                var activeTarget = target.GetProps().GetByName(source.GetName(i),true);
                if (activeTarget == null) continue;

                var value = source.GetValue(i);
                if (value == DBNull.Value) continue;

                activeTarget.SetValue(target, value);
            }
        }
    }
}

 

posted on 2021-03-03 17:07  所谓的潇洒  阅读(117)  评论(0编辑  收藏  举报