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

首先上一个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 @   贰拾~  阅读(227)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示