zoukankan      html  css  js  c++  java
  • C#DAL数据访问层

    BaseDAL:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Reflection;
    
    public class BaseDAL
    {
        public static int Insert(ModelBase obj)
        {
            Type type = obj.GetType();  //获取类型
    
            object[] attr = type.GetCustomAttributes(typeof(MyKeyAttribute), false);    //获取自定义特性
            if (attr.Length == 0)
                throw new Exception("必须定义主键列");
    
            string Key = (attr[0] as MyKeyAttribute).Key;               //获取主键列
            bool IsIdentity = (attr[0] as MyKeyAttribute).IsIdentity;   //是否自增长
    
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            List<SqlParameter> ps = new List<SqlParameter>();
    
            PropertyInfo[] infos = type.GetProperties();        //获取所有属性,即字段名,组装成sql语句
            foreach (PropertyInfo p in infos)
            {
                if (p.GetValue(obj, null) != null)
                {
                    if (p.Name.ToLower() == Key.ToLower() && IsIdentity)    //如果是主键列且自增长就跳过
                        continue;
    
                    sb1.Append(p.Name + ",");
                    sb2.Append("@" + p.Name + ",");
                    ps.Add(new SqlParameter("@" + p.Name, p.GetValue(obj, null)));
                }
            }
    
            string sql = string.Format("insert into {0}({1}) values({2})", type.Name, sb1.ToString().Trim(','), sb2.ToString().Trim(','));
    
            return DBHelper.CUD(sql, ps);
        }
    
        public static int InsertID(ModelBase obj)
        {
            Type type = obj.GetType();  //获取类型
    
            object[] attr = type.GetCustomAttributes(typeof(MyKeyAttribute), false);    //获取自定义特性
            if (attr.Length == 0)
                throw new Exception("必须定义主键列");
    
            string Key = (attr[0] as MyKeyAttribute).Key;               //获取主键列
            bool IsIdentity = (attr[0] as MyKeyAttribute).IsIdentity;   //是否自增长
    
            StringBuilder sb1 = new StringBuilder();
            StringBuilder sb2 = new StringBuilder();
            List<SqlParameter> ps = new List<SqlParameter>();
    
            PropertyInfo[] infos = type.GetProperties();        //获取所有属性,即字段名,组装成sql语句
            foreach (PropertyInfo p in infos)
            {
                if (p.GetValue(obj, null) != null)
                {
                    if (p.Name.ToLower() == Key.ToLower() && IsIdentity)    //如果是主键列且自增长就跳过
                        continue;
    
                    sb1.Append(p.Name + ",");
                    sb2.Append("@" + p.Name + ",");
                    ps.Add(new SqlParameter("@" + p.Name, p.GetValue(obj, null)));
                }
            }
    
            string sql = string.Format("insert into {0}({1}) values({2});select @@identity;", type.Name, sb1.ToString().Trim(','), sb2.ToString().Trim(','));
    
            return Convert.ToInt32(DBHelper.SelectObject(sql, ps));
        }
    
        public static int Update(ModelBase obj)
        {
            Type type = obj.GetType();  //获取类型
    
            object[] attr = type.GetCustomAttributes(typeof(MyKeyAttribute), false);    //通过自定义特性,获取主键列
            if (attr.Length == 0)
                throw new Exception("必须设定主键列!");
    
            string Key = (attr[0] as MyKeyAttribute).Key;
            object KeyValue = type.GetProperty(Key).GetValue(obj, null);    //获取主键列值
            if (KeyValue == null)
                throw new Exception("必须给主键列赋值!");
    
            StringBuilder sb1 = new StringBuilder();
            List<SqlParameter> ps = new List<SqlParameter>();
    
            PropertyInfo[] infos = type.GetProperties();        //获取所有列值,组装成sql语句
            foreach (PropertyInfo p in infos)
            {
                if (p.GetValue(obj, null) != null)
                {
                    if (p.Name.ToLower() != Key.ToLower())
                    {
                        sb1.Append(p.Name + "=@" + p.Name + ",");
                        ps.Add(new SqlParameter("@" + p.Name, p.GetValue(obj, null)));
                    }
                }
            }
    
            string wstr = Key + "=@" + Key;             //获取主键列,组装成sql语句
            ps.Add(new SqlParameter("@" + Key, KeyValue));
    
            string sql = string.Format("update {0} set {1} where {2}", type.Name, sb1.ToString().Trim(','), wstr);
    
            return DBHelper.CUD(sql, ps);
        }
    
        public static int Delete<T>(object objID)
        {
            Type type = typeof(T);
    
            object[] attr = type.GetCustomAttributes(typeof(MyKeyAttribute), false);
            if (attr.Length == 0)
                throw new Exception("必须指定主键列!");
    
            string Key = (attr[0] as MyKeyAttribute).Key;
            string sql = string.Format("delete from {0} where {1}=@{1}", type.Name, Key);
            List<SqlParameter> ps = new List<SqlParameter>();
            ps.Add(new SqlParameter("@" + Key, objID));
    
            return DBHelper.CUD(sql, ps);
        }
    
        public static T SelectObj<T>(object objID)
        {
            Type type = typeof(T);
    
            object[] attr = type.GetCustomAttributes(typeof(MyKeyAttribute), false);
            if (attr.Length == 0)
                throw new Exception("必须设定主键列!");
    
            string Key = (attr[0] as MyKeyAttribute).Key;
            string sql = string.Format("select * from {0} where {1}=@{1}", type.Name, Key);
            List<SqlParameter> ps = new List<SqlParameter>();
            ps.Add(new SqlParameter("@" + Key, objID));
    
            T obj = Activator.CreateInstance<T>();
            using (DataTable dt = DBHelper.SelectTable(sql, ps))
            {
                for (int r = 0; r < dt.Rows.Count; r++)
                {
                    PropertyInfo[] infos = type.GetProperties();
                    foreach (PropertyInfo p in infos)
                    {
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            if (p.Name.ToLower() == dt.Columns[i].ColumnName.ToLower())
                            {
                                if (dt.Rows[r][p.Name] != DBNull.Value)
                                    p.SetValue(obj, dt.Rows[r][p.Name], null);
                            }
                        }
                    }
                }
            }
            return obj;
        }
    
        public static List<T> SelectList<T>(string sql = null, List<SqlParameter> ps = null)
        {
            List<T> list = new List<T>();
    
            Type type = typeof(T);
    
            using (DataTable dt = (sql == null ? DBHelper.SelectTable("select * from " + type.Name) : DBHelper.SelectTable(sql, ps)))
            {
                for (int r = 0; r < dt.Rows.Count; r++)
                {
                    T obj = Activator.CreateInstance<T>();
                    PropertyInfo[] infos = type.GetProperties();
    
                    foreach (PropertyInfo p in infos)
                    {
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            if (p.Name.ToLower() == dt.Columns[i].ColumnName.ToLower())
                            {
                                if (dt.Rows[r][p.Name] != DBNull.Value)
                                    p.SetValue(obj, dt.Rows[r][p.Name], null);
                            }
                        }
                    }
                    list.Add(obj);
                }
            }
            return list;
        }
    }
    

    EntityDAL:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    
    public class EntityDAL : BaseDAL
    {
      //对表或视图实体的数据操作
    }
                
    

    ModelBase:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    public class ModelBase
    {
    
    }
    

    Entity:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    [MyKey("ID",true)]
    public class Entity : ModelBase
    {
        public System.Int32 ID { get; set; }
        public System.String ClassName { get; set; }
    
        public Entity()
        {
            ClassName = string.Empty;
        }
    }
    

    MyKeyAttribute:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    //自定义特性类
    public class MyKeyAttribute : Attribute
    {
        public string Key { get; set; }         //主键列
        public bool IsIdentity { get; set; }    //是否自增长
    
        public MyKeyAttribute(string key, bool isIdentity)
        {
            this.Key = key;
            this.IsIdentity = isIdentity;
        }
    }

    DBHelper:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;
    using System.Configuration;
    
    public class DBHelper
    {
        public static string connstr = ConfigurationManager.ConnectionStrings["connstr"].ToString();
    
        /// <summary>
        ///无参的增改删
        /// </summary>
        public static int CUD(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                conn.Open();
                int result = cmd.ExecuteNonQuery();
    
                return result;
            }
        }
        
    
        /// <summary>
        ///有参的增改删
        /// </summary>
        public static int CUD(string sql, List<SqlParameter> ps)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                if (ps != null)
                    cmd.Parameters.AddRange(ps.ToArray());
                conn.Open();
                int result = cmd.ExecuteNonQuery();
    
                return result;
            }
        }
    
        /// <summary>
        ///无参、断开式数据操作
        /// </summary>
        public static DataSet SelectSet(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
                return ds;
            }
        }
    
    
        /// <summary>
        ///无参、断开式数据操作
        /// </summary>
        public static DataTable SelectTable(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                return ds.Tables[0];
            }
        }
    
        /// <summary>
        ///有参、断开式数据操作
        /// </summary>
        
        public static DataTable SelectTable(string sql,List<SqlParameter> ps)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                if (ps != null)
                    da.SelectCommand.Parameters.AddRange(ps.ToArray());
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                return ds.Tables[0];
            }
        }
    
        /// <summary>
        ///无参、连接式数据操作
        /// </summary>
        
        public static SqlDataReader SelectReader(string sql)
        {
            SqlConnection conn = new SqlConnection(connstr);
            SqlCommand cmd = new SqlCommand(sql, conn);
            conn.Open();
            SqlDataReader sr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    
            return sr;
        }
    
        /// <summary>
        ///有参、连接式数据操作
        /// </summary>
        
        public static SqlDataReader SelectReader(string sql,List<SqlParameter> ps)
        {
            SqlConnection conn = new SqlConnection(connstr);
            SqlCommand cmd = new SqlCommand(sql, conn);
            if (ps != null)
                cmd.Parameters.AddRange(ps.ToArray());
            conn.Open();
            SqlDataReader sr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
    
            return sr;
        }
    
    
        /// <summary>
        ///调用存储过程,返回DataSet
        /// </summary>
        
        public static DataSet SelectProc(string sql, List<SqlParameter> ps)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                //指定命令类型为存储过程模式
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
    
                if (ps != null)
                    da.SelectCommand.Parameters.AddRange(ps.ToArray());
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                return ds;
            }
        }
    
        /// <summary>
        /// 调用存储过程,返回DataTable数组
        /// </summary>
        
        public static DataTable[] SelectProcTable(string sql, List<SqlParameter> ps)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlDataAdapter da = new SqlDataAdapter(sql, conn);
                //指定命令类型为存储过程模式
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
    
                if (ps != null)
                    da.SelectCommand.Parameters.AddRange(ps.ToArray());
                DataSet ds = new DataSet();
                da.Fill(ds);
    
                DataTable[] dts = new DataTable[2];
                ds.Tables.CopyTo(dts, 0);
    
                return dts;
            }
        }
    
    
        /// <summary>
        /// 取单行单列的数据对象
        /// </summary>
        public static object SelectObject(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                conn.Open();
                object obj = cmd.ExecuteScalar();
                //conn.Close();
    
                return obj;
            }
        }
    
        /// <summary>
        /// 取单行单列的数据对象
        /// </summary>
        public static object SelectObject(string sql, List<SqlParameter> ps)
        {
            using (SqlConnection conn = new SqlConnection(connstr))
            {
                SqlCommand cmd = new SqlCommand(sql, conn);
                conn.Open();
                if (ps != null)
                    cmd.Parameters.AddRange(ps.ToArray());
                object obj = cmd.ExecuteScalar();
                //conn.Close();
    
                return obj;
            }
        }
    }
    
  • 相关阅读:
    UITextField小结
    由iPhone项目生成iPad项目
    ios界面动画小结
    UIImagePickerController Class
    Xcode调试相关小结
    cocos2d简易引导
    python 多个装饰器组合应用,实现面向切面之AOP编程
    python 元类型编程, 单例模式SingleTon的一种实现方式
    python 实现简单的PerformanceCountCallHandler装饰器
    wxpython 之 GDI(二)
  • 原文地址:https://www.cnblogs.com/Arlar/p/6926085.html
Copyright © 2011-2022 走看看