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. defrag磁盘整理命令

    1: Microsoft 磁盘碎片整理程序 2: 版权所有 (c) 2007 Microsoft Corp. 3: 参数错误. (0x80070057) 4: 描述: 5: 定位并合并本地卷中的碎片文 ...

  2. cpoint

    #include<iostream> #include<math.h> using namespace std; class CPoint { public: int cpoi ...

  3. javascript给不能修改的函数增加额外处理的方法

    不知道是否可行,但姑且google之. 查看到相关的stack overflow(堆栈溢出)帖子:http://stackoverflow.com/questions/1659219/add-to-a ...

  4. WP开发笔记——WP APP添加页面跳转动画

    微软的toolkit团队为我们为我们提供了这样一套组件,叫做TransitionServices服务. 简单说一下它具备的效果: turnstile(轴旋转效果): turnstile feather ...

  5. vim 安装与运行以及代码的运行

    vi功能是最弱的,也是*nix操蛋之后最基本的editor.后来vi被增强加入众多特性,这就是vim.再后来vim加入图形接口,gvim诞生了.功能最强的是gvim,它的很多特性vim并不支持,vi更 ...

  6. php保存base64数据

    php保存base64数据 if(isset($param['cover_pic']) && !empty($param['cover_pic'])) {
 if (preg_matc ...

  7. Color About——Second

    下面来简要的说一下Android开发中如何对某一个Activity进行背景色的设置.下面我以名字为FirstActivity的Activity的背景色的设置进行说明,先说一下Drawable类: 关于 ...

  8. MySQL 多实例删库脚本

    DB版本:5.5.14 OS:CentOS 6.3 在测试环境中,在一台服务器上创建多个实例,在每个实例中一个一个删库比较麻烦,因此用下面脚本,可以直接删除所有库,除了系统库以外: #!/bin/ba ...

  9. ubuntu 12.04版本出现界面终端打开broken pipe,但是tty1这些可以。

    sudo apt-get remove xserver-xorg sudo apt-get install xserver-xorg

  10. margin负值在页面布局中的应用

    http://www.w3school.com.cn/tiy/t.asp 预览工具 一.左右列固定,中间列自适应布局 此例适用于左右栏宽度固定,中间栏宽度自适应的布局.由于网页的主体部分一般在中间,很 ...