根据实例类型反射操作数据库(简单通用表操作类)

这个类适用简单的表

1.有且只有id为主键,

2.并且实例类主键,也就是id应为字段,其他为属性

3.实例类名跟表名一样,字段属性跟列名一样

public class ProType
    {
        public int id;

        public string type
        {
            get;
            set;
        }
        public int array
        {
            get;
            set;
        }
        public string relyTpye
        {
            get;
            set;
        }
        public string etype
        {
            get;
            set;
        }
    }

  下面就是该类的实现

    
/// <summary>
        /// 排序枚举
        /// </summary>
public enum OrderType { asc,desc}
    public class SqlDAL<T> where T:new ()
    {

        private PropertyInfo[] propertys;
        private List<string> nameList;

        public SqlDAL()
        {
            T t = new T();

            nameList = new List<string>();
            propertys = t.GetType().GetProperties();

            //MessageBox.Show(propertys.Length.ToString());
            foreach (var item in propertys)
            {
                nameList.Add(item.Name);
            }
        }
        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="orderType">排序</param>
        /// <param name="str">排序字段</param>
        /// <returns></returns>
        public List<T> Select(OrderType orderType,params string[] str)
        {

            string orderStr = "";
            if (str.Length > 0)
            {
                orderStr += " order by " + str[0];
                for (int i = 1; i < str.Length; i++)
                {
                    orderStr += "," + str[i];
                }
                orderStr += " " + orderType.ToString();
            }
            T t = new T();
            string sql = "select * from " + t.GetType().Name + orderStr;
            DataTable dt = DBHelper.GetInfo(sql);
            return (List<T>)ModelConvertHelper<T>.ConvertToModel(dt);
        }
        /// <summary>
        /// 增
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public bool Insert(T t)
        {
            List<SqlParameter> parm = new List<SqlParameter>();
            foreach (var item in propertys)
            {
                SqlParameter parmitem = new SqlParameter(item.Name,item.GetValue(t,null));
                parm.Add(parmitem);
            }
            string strName = "";
            string strValue = "";
            strName += nameList[0];
            strValue += "@" + nameList[0];
            for (int i = 1; i < nameList.Count; i++)
            {
                strName += "," + nameList[i];
                strValue += ",@" + nameList[i];
            }
            string sql = "insert into "+t.GetType().Name.ToString() +" ("+strName+") value ("+strValue+")";
            int isAdd = DBHelper.Commed(sql,parm.ToArray());

            if (isAdd > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }

        /// <summary>
        /// 改
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        public bool Update(T t)
        {
            List<SqlParameter> parm = new List<SqlParameter>();
            foreach (var item in propertys)
            {
                SqlParameter parmitem = new SqlParameter(item.Name,item.GetValue(t,null));
                parm.Add(parmitem);
            }

            string str = "";
            str = nameList[0] + "[email protected]" + nameList[0];
            for (int i = 1; i < nameList.Count; i++)
            {
                str += "," + nameList[i] + "[email protected]" + nameList[i];
            }

            string sql = "update "+t.GetType().Name+" set "+str+" where [email protected]";
            int isUpdate = DBHelper.Commed(sql,parm.ToArray());
            if (isUpdate > 0)
            {
                return true;
            }
            else
            {
                return false;
            }

        }
        /// <summary>
        /// 删
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public bool Delete(string id)
        {
            T t = new T();
            string sql = "delete from" + t.GetType().Name + " where id=" + id;
            int isDelete = DBHelper.Commed(sql);
            if (isDelete > 0)
            {
                return true;
            }else
            {
                return false;
            }

        }
    }

这里之所以有这个类,是因为操作这些表的代码大同小异,甚至可以做出通用任意表,实例类可以用特征类来标识,做出字段与列名的相对应

但那种太过繁琐,用来实现这些简单表就有点大材小用,所有先弄出了这个类,如果后面有机会再实现以下任意表通用类

时间: 2024-10-13 16:31:01

根据实例类型反射操作数据库(简单通用表操作类)的相关文章

实例讲解Oracle数据库设置默认表空间问题

实例讲解Oracle数据库设置默认表空间问题 实例讲解Oracle数据库设置默认表空间问题,阅读实例讲解Oracle数据库设置默认表空间问题,DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空 DBA们经常会遇到一个这样令人头疼的问题:不知道谁在Oracle上创建了一个用户,创建时,没有给这个用户指定默认表空间,所以这个用户就会采用默认的表空间——system表空间.导致系统

C#简单注册表操作实例

1.简介操作 //设置注册值 private void Button_Click(object sender, RoutedEventArgs e) { //路径及间隔符号要正确 //1.如果指定路径不存在,则创建 //2.如果指定键存在,则覆盖值 string path = "HKEY_CURRENT_USER\\myRegOne"; Registry.SetValue(path, "Expend", "hellow world!"); Mes

Python数据库操作 MySQL数据库与数据表操作#学习猿地

# MySQL数据库与数据表操作 + 数据库的操作 + 数据库创建 + 数据库删除 + 数据表的操作 + 数据表的创建 + 数据表的修改 (表结构) + 数据表的删除 ### 数据库的操作 #### 1.数据库的创建 ```mysql # 链接mysql数据库后,进入mysql后可以操作数据 # 1. 创建库 create database if not exists tlxy default charset=utf8: -- 1. 数据库 tlxy 如果不存在则创建数据库,存在则不创建 --

MySql 数据库、数据表操作

数据库操作 创建数据库 语法 语法一:create database 数据库名 语法二:create database 数据库名 character set 字符集; 查看数据库 语法 查看数据库服务器中的所有的数据库:show databases; 查看某个数据库的定义的信息:show create database 数据库名; 删除数据库 语法(慎用) drop database 数据库名称; 其他数据库操作命令 语法 切换数据库:use 数据库名; 查看正在使用的数据库:select da

C#注册表操作类(完整版)

下面贴出自己用C#写的注册表操作类,欢迎大家拍砖! 1.注册表基项静态域 1 /// <summary> 2 /// 注册表基项静态域 3 /// 4 /// 主要包括: 5 /// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 6 /// 2.Registry.CurrentUser 对应于HKEY_CURRENT_USER主键 7 /// 3.Registry.LocalMachine 对应于 HKEY_LOCAL_MACHINE主键 8 //

php对数据库增删改查操作类

1 <?php 2 3 /** 4 * 函数名称:SqlTool.class.php 5 * 函数功能:php对数据库增删改查操作类 6 * 函数作者:张真贵 7 * 创建时间:2015-01-05 8 * 修改时间: 9 */ 10 header("Content-Type:text/html;charset=utf-8"); 11 class SqlTool{ 12 private $conn; 13 private $host = 'localhost'; 14 priva

C#注册表操作类--完整优化版

using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; namespace Register { public class RegisterHelper { /// <summary> /// 注册表基项静态域 /// /// 主要包括: ///1.Registry.ClassesRoot 对应于 HKEY_CLASSES_ROOT 主键 ///2.Registry.Cu

前端学数据库之多表操作

× 目录 [1]准备工作 [2]多表更新 [3]两步更新[4]连接[5]无限级表 前面的话 上一篇博文中介绍了子查询的相关内容,最后我们将查询结果存储到一个新的数据表中.下面我们将接着子查询的案例,详细介绍数据库中的多表操作 准备工作 在上一篇博文,我们将详细数据存储到tdb_goods数据表中,将详细数据中的类别信息存储到tdb_goods_cates数据表中 接下来,我们要研究如何通过tdb_goods_cates数据表来更新tdb_goods表 多表更新 多表更新类似于单表更新 UPDAT

MyBatis实现Mysql数据库分库分表操作和总结

阅读目录 前言 MyBatis实现分表最简单步骤 分离的方式 分离的策略 分离的问题 分离的原则 实现分离的方式 总结 前言 作为一个数据库,作为数据库中的一张表,随着用户的增多随着时间的推移,总有一天,数据量会大到一个难以处理的地步.这时仅仅一张表的数据就已经超过了千万,无论是查询还是修改,对于它的操作都会很耗时,这时就需要进行数据库切分的操作了. MyBatis实现分表最简单步骤 既然文章的标题都这么写了,不如直接上干货来的比较实际,我们就先来看看如何实现最简单的分表. 1.我们模拟用户表数