基于反射特性的简单数据库操作

首先上一个SqlHelper

public class SqlHelper
    {
        public static string GetSqlConnectionString()
        {
            return ConfigurationManager.ConnectionStrings["State"].ConnectionString;
        }
       
        public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
            {
                using (SqlCommand comm = conn.CreateCommand())
                {
                    conn.Open();
                    comm.CommandText = sql;
                    comm.Parameters.AddRange(parameters);
                    return comm.ExecuteNonQuery();
                }
            }
        }
       
        public static object ExecuteScalar(string sql, params SqlParameter[] parameters)
        {
            using (SqlConnection conn = new SqlConnection(GetSqlConnectionString()))
            {
                using (SqlCommand comm = conn.CreateCommand())
                {
                    conn.Open();
                    comm.CommandText = sql;
                    comm.Parameters.AddRange(parameters);
                    return comm.ExecuteScalar();
                }
            }
        }
        
        public static DataTable ExecuteDataTable(string sql, params SqlParameter[] parameters)
        {
            using (SqlDataAdapter adapter = new SqlDataAdapter(sql, GetSqlConnectionString()))
            {
                DataTable dt = new DataTable();
                adapter.SelectCommand.Parameters.AddRange(parameters);
                adapter.Fill(dt);
                return dt;
            }
        }

        public static SqlDataReader ExecuteReader(string sqlText, params SqlParameter[] parameters)
        {
            //SqlDataReader要求,它读取数据的时候有,它独占它的SqlConnection对象,而且SqlConnection必须是Open状态
            SqlConnection conn = new SqlConnection(GetSqlConnectionString());//不要释放连接,因为后面还需要连接打开状态
            SqlCommand cmd = conn.CreateCommand();
            conn.Open();
            cmd.CommandText = sqlText;
            cmd.Parameters.AddRange(parameters);
            //CommandBehavior.CloseConnection当SqlDataReader释放的时候,顺便把SqlConnection对象也释放掉
            return cmd.ExecuteReader(CommandBehavior.CloseConnection);
        }
    }
View Code

 

同时把配置文件的数据库链接配置写好

 <connectionStrings>
    <add name="State" connectionString="server=.;user id=sa;pwd=;database=xxx"/>
  </connectionStrings>

把BaseModel也添加好

 public class BaseModel
    {
        public int ID { get; set; }

        public static IEnumerable<T> Find<T>() where T : class, new()
        {
            List<T> result = new List<T>();

            List<string> list = new List<string>();
            Type type = typeof(T);

            PropertyInfo[] propertyInfo = type.GetProperties();
            foreach (var item in propertyInfo)
            {
                list.Add(item.Name);
            }
            string cloStr = string.Join(",", list);

            var conStr = ConfigurationManager.ConnectionStrings["State"].ConnectionString;
            string sql = "select " + cloStr + " from dbo.[" + type.Name + "]";

            SqlDataReader read = SqlHelper.ExecuteReader(sql);

            while (read.Read())
            {
                T model = Activator.CreateInstance<T>();
                for (int i = 0; i < read.FieldCount; i++)
                {
                    PropertyInfo pi = type.GetProperty(read.GetName(i));
                    pi.SetValue(model, read.GetValue(i));
                }

                result.Add(model);
            }

            return result;
        }

        public static bool Insert<T>(T t)
        {
            bool result = false;

            Type type = typeof(T);
            

            StringBuilder sql = new StringBuilder();
            sql.Append("Insert into dbo.[" + type.Name + "]");
            sql.Append("(" + GetColmons(t) + ")");
            sql.Append(" values(" + GetValues<T>(t) + ")");
            result = SqlHelper.ExecuteNonQuery(sql.ToString()) > 0;

            return result;
        }

        public static bool Delete<T>(int id)
        {
            bool result = false;
            try
            {
                Type type = typeof(T);
                StringBuilder sql = new StringBuilder();
                sql.Append("Delete dbo.[" + type.Name+"]");
                sql.Append(" where id=" + id);
                result = SqlHelper.ExecuteNonQuery(sql.ToString()) > 0;
            }
            catch
            {

            }

            return result;
        }

        public static string GetValues<T>(T t)
        {
            if (t == null)
            {
                return string.Empty;
            }

            return string.Join(",",
                t.GetType().GetRuntimeProperties().Select(p => string.Format("'{0}'", p.GetValue(t))).ToArray());

        }

        private static string GetColmons<T>(T t)
        {
            if (t == null)
            {
                return string.Empty;
            }

            return string.Join(",", t.GetType().GetProperties().Select(p => p.Name).ToArray());
        }
    }
View Code

 

下面添加一个Model做测试

 public class User:BaseModel
    {
        public string Name { get; set; }

        public int Age { get; set; }

        public long Phone { get; set; }
    }
View Code

然后是上层代码

static void Main(string[] args)
        {
            Console.WriteLine("====Start=====");
            


            User user = new User();
            
            user.ID = 5;
            user.Name = "邹邹";
            user.Age = 18;
            user.Phone = 123123;

            bool _insertUser = BaseModel.Insert<User>(user);

            bool _delUser = BaseModel.Delete<User>(5);

            var _userList = BaseModel.Find<User>();
            if (_insertUser)
            {
                Console.WriteLine("插入成功");
            }
            else
            {
                Console.WriteLine("插入成功");
            }
            if (_delUser)
            {
                Console.WriteLine("删除成功");
            }
            else
            {
                Console.WriteLine("删除失败");
            }

            foreach (var item in _userList)
            {
                Console.WriteLine($"ID:{item.ID}  -  名字{item.Name}  -  年龄:{item.Age}  -  手机号:{item.Phone}");
            }

            Console.ReadKey();
        }
View Code

 

成功~~

 

posted @ 2019-07-21 18:49  贰拾~  阅读(225)  评论(0编辑  收藏  举报