1: using System;
  2: using System.Collections.Generic;
  3: using System.Linq;
  4: using System.Text;
  5: using System.Data;
  6: using System.Data.SqlClient;
  7: using System.Reflection;
  8:
  9: namespace DAL
 10: {
 11:     public class SqlHelper
 12:     {
 13:         private const string CONNECTION_STRING = @"server=.\sql2008;uid=sa;pwd=;database=BBSDB";
 14:
 15:         private static T ExecuteReader<T>(SqlDataReader dr)
 16:         {
 17:             T obj = default(T);
 18:             obj = Activator.CreateInstance<T>();//T obj = new T();//instance
 19:             Type type = typeof(T);//get T class type by T's Name
 20:             PropertyInfo[] propertyInfos = type.GetProperties();//get current Type's all properties
 21:             int fieldCount = dr.FieldCount;//get column count
 22:             for (int i = 0; i < fieldCount; i++)
 23:             {
 24:                 string fieldName = dr.GetName(i);//get column
 25:                 foreach (PropertyInfo propertyInfo in propertyInfos)
 26:                 {//per property infoname
 27:                     string properyName = propertyInfo.Name;//get property name
 28:                     if (string.Compare(fieldName, properyName, true) == 0)
 29:                     {//column's name == propery's name
 30:                         object value = dr.GetValue(i);//get column's value
 31:                         if (value != null && value != DBNull.Value)
 32:                         {
 33:                             propertyInfo.SetValue(obj, value, null);//set property's value
 34:                         }
 35:                         break;
 36:                     }
 37:                 }
 38:             }
 39:             return obj;
 40:         }
 41:
 42:         public static List<T> ExecuteList<T>(string cmdText, CommandType commandType, params SqlParameter[] args)
 43:         {
 44:             List<T> list = new List<T>();
 45:             using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
 46:             {
 47:                 using (SqlCommand cmd = new SqlCommand(cmdText, con))
 48:                 {
 49:                     cmd.CommandType = commandType;
 50:                     cmd.Parameters.AddRange(args);
 51:                     con.Open();
 52:                     using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
 53:                     {
 54:                         while (dr.Read())
 55:                         {
 56:                             //dr.GetInt32(0);
 57:                             //dr.GetString(1);
 58:                             T obj = ExecuteReader<T>(dr);
 59:                             list.Add(obj);
 60:                         }
 61:                     }
 62:                 }
 63:             }
 64:             return list;
 65:         }
 66:
 67:         public static T ExecuteEntity<T>(string cmdText, CommandType commandType, params SqlParameter[] args)
 68:         {
 69:             T obj = default(T);
 70:             using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
 71:             {
 72:                 using (SqlCommand cmd = new SqlCommand(cmdText, con))
 73:                 {
 74:                     cmd.CommandType = commandType;
 75:                     cmd.Parameters.AddRange(args);
 76:                     con.Open();
 77:                     using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
 78:                     {
 79:                         while (dr.Read())
 80:                         {
 81:                             obj = ExecuteReader<T>(dr);
 82:                             break;
 83:                         }
 84:                     }
 85:                 }
 86:             }
 87:             return obj;
 88:         }
 89:
 90:         public static int ExecuteNonQuery(string cmdText, CommandType commandType, params SqlParameter[] args)
 91:         {
 92:             int result = -1;
 93:             using (SqlConnection con = new SqlConnection(CONNECTION_STRING))
 94:             {
 95:                 using (SqlCommand cmd = new SqlCommand(cmdText, con))
 96:                 {
 97:                     cmd.Parameters.AddRange(args);
 98:                     cmd.CommandType = CommandType.StoredProcedure;
 99:                     con.Open();
100:                     result = cmd.ExecuteNonQuery();
101:                 }
102:             }
103:             return result;
104:         }
105:
106:     }
107: }
108: 

青鸟 王云鹏老师写的SqlHelper 泛型方法,反射,支持实体类的更多相关文章

  1. java反射对实体类取值和赋值,可以写成通过实体类获取其他元素的数据,很方便哦~~~

    项目中需要过滤前面表单页面中传过来的实体类的中的String类型变量的前后空格过滤,由于前几天看过一个其他技术博客的的java反射讲解,非常受益.于是,哈哈哈 public static <T& ...

  2. [原创]如何写好SqlHelper

    所有写数据库应用的都会遇到SqlHelper.每个人实现的也不同,网上现成的例子也很多.但在实际操作中,大部分都不实用.什么样的才是实用的?答:适合应用场景的! 下面来介绍下我写的一个关于Oracle ...

  3. 引用 Session详解 作者:郎云鹏

    本文转载自leeldy<Session详解 作者:郎云鹏>   引用 leeldy 的 Session详解 作者:郎云鹏 目录: 一.术语session 二.HTTP协议与状态保持 三.理 ...

  4. 实体写到redis写不进去--误把类当成实体类

    之前一直都把实体写入redis都没有问题,今天再次这样干,结果却是怎么写都写不进去,redis里的值老是为空 最后才发现把类当成了实体类,当然写不进去了. 把类: /// <summary> ...

  5. 多年前写的DataTable与实体类的转换,已放github

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 起因 代码 UnitTest G ...

  6. 我写了一个java实体类,implements了Serializable接口,然后我如何让serialversionUID自动生成

    写了一个java实体类,implements了Serializable接口,让serialversionUID自动生成方法: 1.点击类旁边的警告符号: 2.选择Add generated seria ...

  7. MySQL写delete语句时不支持表别名

    今天写代码时发现了下面一个比较奇怪的问题: 有下面的删除数据的SQL ; 这个sql本来没有问题,但是在MySQL中执行时会报错 ; 原因是 MySQL写delete语句时不支持表别名,困扰了我一会儿 ...

  8. 【springboot】【idea】实体类免写get、set等方法,使用lombok依赖和插件的@Data类注解

    需求,一个实体类,规范写法一定要对应的get.set方法,有必要还要重写toString方法.虽然可以快速生成get.set等方法,但是如果要添加或减少成员属性时就得重新生成get.set等方法. 而 ...

  9. [原创]如何写好SqlHelper 之终章

    精简的美丽...... 标题有点大.但是,我觉得99%的接近了. 好了,下面我们来说说一个SqlHelper为了适应各种不同的业务需要,它应该具备哪些基本要素. 第一点.可控的事务. 事务是数据库操作 ...

随机推荐

  1. python——类

    类的定义格式: class CLASSNAME(父类1,父类2,父类3): __A  = 0     ##私有属性,两个_开头,只有在该类中的函数才能访问 B = 0 ##公共属性 def 函数名(s ...

  2. hi,mongo!(1)

    用了很多年的关系型数据库,想换一种思路,学习一下最近比较火的mongo数据库. 一.下载.安装mongo 下载地址:http://www.mongodb.org/downloads(官网) 官网的mo ...

  3. Android API Level与sdk版本对照表

    API等级1: Android 1.0 API等级2: Android 1.1 Petit Four 花式小蛋糕 API等级3: Android 1.5 Cupcake 纸杯蛋糕 API等级4: An ...

  4. 水面波浪形View--第三方开源--WaveView(电量、能量、容量指示)

    这种WaveView在一些常见的APP开发中,以水面波浪波形的形象的生动展示手机还剩余多少电量,存储容量还有多少,比较形象直观生动. WaveView在github上的项目主页是:https://gi ...

  5. 关于查看Android系统源码【Written By KillerLegend】

    可能你会想下载Android系统源码,但是我不知道你会看多少系统的源码,如果你对源码只是偶尔看一次的话,推荐你在线看Android的系统源码,下面提供几种查看android系统源码的方法. 1:打开这 ...

  6. Delphi XE5教程1:语言概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  7. 通过替换frm文件方式修改表结构

    版本:5.6.16 在自己的虚拟环境中,测试创建一个表,表结构如下:mysql> drop table yoon_temp;Query OK, 0 rows affected (0.09 sec ...

  8. js 前加分号和感叹号是什么意思?

    ;!function(){}();  ;!有什么用? 从语法上来开,Javascript中分号表示语句结束,在开头加上,可能是为了压缩的时候和别的方法分割一下,表示一个新的语句开始.所以,如果在一个单 ...

  9. 《自学C语言》第一章:C语言简介

    这一章主要介绍什么是C语言,以及它的产生.发展历史.如其中所说的计算机术语有不懂的请百度,例如什么是强类型,什么是高级语言. 1.C语言是什么? 答:C语言是一门通用计算机编程语言,应用广泛.C语言的 ...

  10. c# 重载运算符(+-|&)和扩展方法

    通常我们需要对class的相加,相减,相乘 等重载以适应需求, 如caml查询的时候,我们可以定义一个caml类,然后来操作这些查询. 首先,我们定义一个class为Test public class ...