定义通用访问数据库类

最近在公司看封装的代码,访问数据库很方便,我们只需定义Model,便可访问数据库,当然了都是封装的dll,因此自己也试着写了一个,现在做个记录。

下面是特性标签的定义,主要用于获取本地属性定义和数据库定义以及数据库字段定义:

 public class DataMappingAttribute : Attribute
    {
        private string localName, dbName;
        private string type;
        public DataMappingAttribute(string a, string b, DbType type)
        {
            this.localName = a;
            this.dbName = b;
            this.type = "System." + type.ToString();
        }

        public string LocalName
        {
            get { return localName; }
        }
        public string DbName { get { return dbName; } }
        public string DataType { get { return type; } }
    }

下面是数据库访问后,生成实体模型数据列表,主要用到泛型,反射技术,先生成Datatable定义,然后用数据库数据填充,遍历每一个行数据,根据自定义属性,确定数据和对象是如何一一对应的:

public class DataCommand
    {
        private const string ConnStr = "Data Source=.;Initial Catalog=xxx;User Id=sa;Password=xxx;";
        public List<T> Exe<T>(string cmdStr)
        {
            var resList = new List<T>();

            var dt = new DataTable();
            /*数据库字段与Datatable绑定*/
            var type = typeof(T);
            var fieldList = type.GetProperties();
            foreach (var filed in fieldList)
            {
                var attributes = filed.GetCustomAttributes(typeof(DataMappingAttribute), false);
                var ab = (DataMappingAttribute)attributes[0];
                dt.Columns.Add(ab.DbName,Type.GetType(ab.DataType));
            }

            using (var connection = new SqlConnection(ConnStr))
            {
                connection.Open();
                var cmd = new SqlCommand {Connection = connection};
                cmd.CommandText = cmdStr;
                var dataAdapter = new SqlDataAdapter(cmd);
                dataAdapter.Fill(dt);
                connection.Close();
            }

            foreach (DataRow row in dt.Rows)
            {
                var objT = Activator.CreateInstance<T>();
                foreach (var filed in fieldList)
                {
                    var attributes = filed.GetCustomAttributes(typeof(DataMappingAttribute), false);
                    var tempName = "";
                    foreach (var attr in attributes)
                    {
                        var attri = (DataMappingAttribute)attr;
                        if (attri.LocalName.Equals(filed.Name))
                            tempName = attri.DbName;
                    }

                    if (!filed.CanWrite ||string.IsNullOrWhiteSpace(tempName)) continue;
                    filed.SetValue(objT,row[tempName], null);
                }
                resList.Add(objT);
            }
            return resList;
        }
时间: 2024-11-14 14:08:06

定义通用访问数据库类的相关文章

定义数据模型&访问数据库

定义数据模型 一.Django定义数据模型在App中的models.py文件,数据库的表名称以类的形式来定义: [[email protected] web]# cd /opt/python/django/web/blog/ [[email protected] blog]# vim models.py from django.db import models # Create your models here. class Host(models.Model):     hostname = 

关于CI框架访问数据库类提示Call to undefined function mysqli_init()

大家好,我曾经是ASP.NET MVC的践行者,现在是PHP,同时也是CodeIgniter框架的初学者和践行者,当时由于项目原因,我被迫给自己打满鸡血,满怀激情的选用Yii2,Lavarel5,CodeIgniter等PHP框架进行项目开发,同你一样被"Call to undefined function mysqli_init()"这个小问题折磨得挠头骚耳,找遍各大论坛依然找不到问题之所在,差点铩羽而归(当时我也按照论坛的提示做了,发现都没有用),好的屁话不多说,现在由我直入正题说

C#:数据库通用访问类 SqlHelper

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Globalization; using System.IO; using System.Text.RegularExpressions; using System.Xml; using System.Reflection;

分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlserver数据库,界面如下 部分代码如下 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Te

C#登录窗口(访问数据库)的制作,类文件的制作及使用

一.类文件的编写及使用. 可以单独建立一个类文件(使用记事本),然后包含在项目中,使用时加上该类的命名空间,就可以使用这个类了. 如何在一个项目里包含一个类文件? 1.在项目里新建一个文件夹: 2.将类文件放在这个文件夹里: 3.在vs界面的解决方案资源管理器里,点击"显示全部文件"按钮,然后选中这些文件,右击->"包含在项目里": 4.在项目的其他地方引用命名空间后,就可以使用这些类了. 二.登录窗口的制作 我们可以借助一个类文件生成器(Code Smith

sqlserver数据库访问帮助类

1 /// <summary> 2 /// 数据库访问帮助类 3 /// </summary> 4 public static class DbHelper 5 { 6 private const string ConnStr = "server=127.0.0.1;database=db_test;Uid=user1;Pwd=Ps123321;"; 7 8 9 /// <summary> 10 /// 执行 增.删.改 11 /// </su

连接访问数据库的技术方法

几种数据库连接方式优缺点比较 访问接口 易用性 运行能力 可扩展性 技术层次 突出特点 ODBC 差 较高 差 底层 可进行底层控制 MFC ODBC 好 一般 高层 同用标准,应用广泛 MFC DAO 好 较高 一般 高层 访问JET性能最好 OLE DB 很难 高 好 底层 可访问非关系型数据库 ADO 最好 高 好 高层 可访问非关系型数据库,有多种编程接口 ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的

通用访问 - 用“反射”来设计通用的通信协议

1. 效果演示 2. 通信协议 功能介绍 特点 TCP协议 WebApi协议 3. SDK与工具 4. 应用示例 迷你网管 通用GIS 系统管理 5. 设计初衷与演化 1. 效果演示 服务端代码 //创建服务器 var __服务端 = FT通用访问工厂.创建服务端(); __服务端.端口 = 8888; __服务端.开启(); //实际对象 var __基本状态 = new M基本状态(); __基本状态.版本 = "1.0.0.0"; __基本状态.待处理问题.Add(new M问题

Spring入门到精通&lt;三&gt;Spring访问数据库

Spring在数据访问方面提供了模板化和Dao支持类的提供,方便操作数据库. 一.Spring JDBC 1.配置数据源 DataSource 不管选择哪一种Spring Dao的支持方式,你都需要配置一个数据源的引用.配置方式有三种: ①.使用JNDI查找数据源: ②.使用数据源连接池:(dbcp c3p0 druid)  <!-- 配置数据源 -->      <bean id="dataSource" class="org.apache.commons