dal层通用类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using System.Reflection;
using BaseLibrary;

namespace DAL
{
/// <summary>
/// 通用类
/// </summary>
public class commonHelper
{
/// <summary>
/// 获取查询集合数量(通用查询数据总量)
/// </summary>
/// <param name="tableName">表名</param>
/// <param name="where">条件</param>
/// <param name="group">分组条件</param>
/// <returns></returns>
public int GetTableCount(string tableName, string where, string group)
{
try
{
SqlParameter[] Para = new SqlParameter[] {
new SqlParameter("@TableNames",tableName),
new SqlParameter("@PrimaryKey","*"),
new SqlParameter("@Fields","*"),
new SqlParameter("@PageSize",10),
new SqlParameter("@CurrentPage",1),
new SqlParameter("@Filter",where),
new SqlParameter("@Group",group),
new SqlParameter("@Order",DBNull.Value),
new SqlParameter("@RecordCount",1)
};
SqlDataReader reader = sqlHelper.ExecuteReader(CommandType.StoredProcedure, "usp_PagingLarge", Para);
int total = 0;
while (reader.Read())
{
total = Convert.ToInt32(reader["Total"]);
}
return total;

}
catch (Exception ex)
{
LogMsg.WriteLog(ex.ToString());
return 0;
}
}

//获取分页数据(公共部分)
public static SqlDataReader GetTableList(string TableNames, string PrimaryKey, string Fields, int pageSize, int indexPage, string where, string orderby, int RecordCount, string group)
{
indexPage--;//这里是从0开始的
SqlParameter[] Para = new SqlParameter[] {
new SqlParameter("@TableNames",TableNames),
new SqlParameter("@PrimaryKey",PrimaryKey),
new SqlParameter("@Fields",Fields),
new SqlParameter("@PageSize",pageSize),
new SqlParameter("@CurrentPage",indexPage),
new SqlParameter("@Filter",where),
new SqlParameter("@Group",group),
new SqlParameter("@Order",orderby),
new SqlParameter("@RecordCount",RecordCount)
};
SqlDataReader reader = sqlHelper.ExecuteReader(CommandType.StoredProcedure, "usp_PagingLarge", Para);
return reader;
}

/// <summary>
/// SqlDataReader读取封装List对象集合
/// --以下通过智能匹配赋值的方法使用前提是:数据表必须每个字段都非空,或者空值赋值给的Model对象属性类型为:double,String,int,datetime的时候才适用
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sdr"></param>
/// <returns></returns>
public static List<T> ConvertData<T>(SqlDataReader sdr)
{
List<T> list = new List<T>();
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
while (sdr.Read())
{
T model = Activator.CreateInstance<T>();
for (int i = 0; i < properties.Length; i++)
{
for (int j = 0; j < sdr.FieldCount; j++)
{
//判断属性的名称和字段的名称是否相同
if (properties[i].Name == sdr.GetName(j))
{
Object value = sdr[j];
//将字段的值赋值给T中的属性
if (value != DBNull.Value)
{
properties[i].SetValue(model, value, null);
}
else
{
//例如:isUser=0 赋值UseDate的时候赋值一个字符串空值肯定错误。
//properties[i].SetValue(model, "", null);

switch (properties[i].PropertyType.Name)
{
case "String":
properties[i].SetValue(model, "", null);
break;
case "Int":
properties[i].SetValue(model, 0, null);
break;
case "Float":
properties[i].SetValue(model, 0, null);
break;
case "Double":
properties[i].SetValue(model, 0, null);
break;
case "DateTime":
properties[i].SetValue(model, null, null);
break;
default:
properties[i].SetValue(model, null, null);
break;
}
}
break;
}
}
}
list.Add(model);
}
return list;
}

/// <summary>
/// SqlDataReader读取封装对象
/// --以下通过智能匹配赋值的方法使用前提是:数据表必须每个字段都非空,或者空值赋值给的Model对象属性类型为:double,String,int,datetime的时候才适用
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sdr"></param>
/// <returns></returns>
public static T ConvertObject<T>(SqlDataReader sdr)
{
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
T model = Activator.CreateInstance<T>();
while (sdr.Read())
{
for (int i = 0; i < properties.Length; i++)
{
for (int j = 0; j < sdr.FieldCount; j++)
{
//判断属性的名称和字段的名称是否相同
if (properties[i].Name == sdr.GetName(j))
{
Object value = sdr[j];
//将字段的值赋值给T中的属性
if (value != DBNull.Value)
{
properties[i].SetValue(model, value, null);
}
else
{
//例如:isUser=0 赋值UseDate的时候赋值一个字符串空值肯定错误。
//properties[i].SetValue(model, "", null);

switch (properties[i].PropertyType.Name)
{
case "String":
properties[i].SetValue(model, "", null);
break;
case "Int":
properties[i].SetValue(model, 0, null);
break;
case "Float":
properties[i].SetValue(model, 0, null);
break;
case "Double":
properties[i].SetValue(model, 0, null);
break;
case "DateTime":
properties[i].SetValue(model, null, null);
break;
default:
properties[i].SetValue(model, null, null);
break;
}
}
break;
}
}
}
}
return model;
}

/// <summary>
/// 对数据库增删改的操作
/// 对于不适用参数化传参的时候,应该对各个参数进行过滤敏感关键词
/// </summary>
/// <param name="sqlStr">sql语句或存储过程</param>
/// <param name="cmdType">执行类型</param>
/// <param name="cmdParms">无参数则不传此值</param>
/// <returns></returns>
public bool ExecuteSQL(string sqlStr, CommandType cmdType, params SqlParameter[] cmdParms)
{
try
{
int i = sqlHelper.ExecuteNonQuery(cmdType, sqlStr, cmdParms);
if (i <= 0)
{
return false;
}
}
catch (Exception ex)
{
LogMsg.WriteLog("sql:" + sqlStr + "--------------------" + ex.ToString());
return false;
}
return true;
}

/// <summary>
/// 对数据库查询返回一个值的方法
/// 对于不适用参数化传参的时候,应该对各个参数进行过滤敏感关键词
/// </summary>
/// <param name="sqlStr">sql语句或存储过程</param>
/// <param name="cmdType">执行类型</param>
/// <param name="cmdParms">无参数则不传此值</param>
/// <returns></returns>
public object ExecuteScalar(string sqlStr, CommandType cmdType, params SqlParameter[] cmdParms)
{
try
{
object i = sqlHelper.ExecuteScalar(cmdType, sqlStr, cmdParms);
return i;
}
catch (Exception ex)
{
LogMsg.WriteLog("sql:" + sqlStr + "--------------------" + ex.ToString());
return null;
}
}

/// <summary>
/// 对数据库查询数据对象的封装
/// --对于不适用参数化传参的时候,应该对各个参数进行过滤敏感关键词
/// --以下通过智能匹配赋值的方法使用前提是:数据表必须每个字段都非空,或者空值赋值给的Model对象属性类型为:double,String,int,datetime的时候才适用
/// </summary>
/// <param name="sqlStr">sql语句或存储过程</param>
/// <param name="cmdType">执行类型</param>
/// <param name="cmdParms">无参数则不传此值</param>
/// <returns></returns>
public T QueryEntity<T>(string sqlStr, CommandType cmdType, params SqlParameter[] cmdParms)
{
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();
T model = Activator.CreateInstance<T>();
try
{
SqlDataReader sdr = sqlHelper.ExecuteReader(cmdType, sqlStr, cmdParms);
while (sdr.Read())
{
for (int i = 0; i < properties.Length; i++)
{
for (int j = 0; j < sdr.FieldCount; j++)
{
//判断属性的名称和字段的名称是否相同
if (properties[i].Name == sdr.GetName(j))
{
Object value = sdr[j];
//将字段的值赋值给T中的属性
if (value != DBNull.Value)
{
properties[i].SetValue(model, value, null);
}
else
{
//例如:isUser=0 赋值UseDate的时候赋值一个字符串空值肯定错误。
//properties[i].SetValue(model, "", null);

switch (properties[i].PropertyType.Name)
{
case "String":
properties[i].SetValue(model, "", null);
break;
case "Int":
properties[i].SetValue(model, 0, null);
break;
case "Float":
properties[i].SetValue(model, 0, null);
break;
case "Double":
properties[i].SetValue(model, 0, null);
break;
case "DateTime":
properties[i].SetValue(model, null, null);
break;
default:
properties[i].SetValue(model, null, null);
break;
}
}
break;
}
}
}
}
sdr.Close();
}
catch (Exception ex)
{
LogMsg.WriteLog("sql:" + sqlStr + "--------------------" + ex.ToString());
return model;
}
return model;
}

/// <summary>
/// 对数据库查询数据对象集合的封装 不能查询单个字段,如select QID from TableA
/// --对于不适用参数化传参的时候,应该对各个参数进行过滤敏感关键词
/// --以下通过智能匹配赋值的方法使用前提是:数据表必须每个字段都非空,或者空值赋值给的Model对象属性类型为:double,String,int,datetime的时候才适用
/// </summary>
/// <param name="sqlStr">sql语句或存储过程</param>
/// <param name="cmdType">执行类型</param>
/// <param name="cmdParms">无参数则不传此值</param>
/// <returns></returns>
public List<T> QueryEntityList<T>(string sqlStr, CommandType cmdType, params SqlParameter[] cmdParms)
{
try
{
List<T> list = new List<T>();
Type type = typeof(T);
PropertyInfo[] properties = type.GetProperties();

SqlDataReader sdr = sqlHelper.ExecuteReader(cmdType, sqlStr, cmdParms);
while (sdr.Read())
{
T model = Activator.CreateInstance<T>();
for (int i = 0; i < properties.Length; i++)
{
for (int j = 0; j < sdr.FieldCount; j++)
{
//判断属性的名称和字段的名称是否相同
if (properties[i].Name == sdr.GetName(j))
{
Object value = sdr[j];
//将字段的值赋值给T中的属性
if (value != DBNull.Value)
{
properties[i].SetValue(model, value, null);
}
else
{
//例如:isUser=0 赋值UseDate的时候赋值一个字符串空值肯定错误。
//properties[i].SetValue(model, "", null);

switch (properties[i].PropertyType.Name)
{
case "String":
properties[i].SetValue(model, "", null);
break;
case "Int":
properties[i].SetValue(model, 0, null);
break;
case "Float":
properties[i].SetValue(model, 0, null);
break;
case "Double":
properties[i].SetValue(model, 0, null);
break;
case "DateTime":
properties[i].SetValue(model, null, null);
break;
default:
properties[i].SetValue(model, null, null);
break;
}
}
break;
}
}
}
list.Add(model);
}
sdr.Close();
return list;
}
catch (Exception ex)
{
LogMsg.WriteLog("sql:" + sqlStr + "--------------------" + ex.ToString());
return null;
}
}

/// <summary>
/// //sql执行返回DataTable
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
public DataTable GetDataTable(string sql)
{
try
{
DataTable dt = new DataTable();
dt = sqlHelper.GetQueryResult(sql);
return dt;
}
catch (Exception)
{
return null;
}
}
}
}

时间: 2024-10-07 10:22:20

dal层通用类的相关文章

反射+泛型+缓存 ASP.NET的数据层通用类

1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Reflection ; 5 using System.Data ; 6 using BaiChang.HealBlog.Model ; 7 using System.Data.SqlClient; 8 using BaiChang.SqlDBUtility; 9 10 namespace BaiChang.Middle.

动态创建DAL层类的实例

为了可扩展性,方便以后对于代码的修改维护,使用动态创建DAL层对象. 1.首先在webconfig中的configuration下添加配置项 <appSettings> <add key="IStuDAL" value="StuDAL.StudentDAL"/> </appSettings> 2.在工厂中创建实例 1 namespace DALFactory 2 { 3 public class DALHelper 4 { 5 p

一个通用的数据访问层实现类

在java商城开发中以及人事系统开发中我们知道会涉及到很多的数据表,如果每一个数据库都按照我们开发人员所定义的那样一个表,一个实现类,然后是一个数据访问层接口,数据访问层实现类,业务逻辑层接口,业务逻辑层实现类...这样写下去,代码量无疑是很大的. 下面我们就介绍一个基本的数据访问层实现类,至于接口的定义,我想只要明白实现类,接口的定义应该很简单. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

.NET基础篇——Entity Framework 数据转换层通用类

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 在实现基础的三层开发的时候,大家时常会在数据层对每个实体进行CRUD的操作,其中存在相当多的重复代码.为了减少重复代码的出现,通常都会定义一个共用类,实现相似的操作,下面为大家介绍一下Entity Framework时常用到的通用类.首先在数据

MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

http://www.cnblogs.com/darrenji/p/3809219.html 本篇为系列第一篇,包括: ■ 1.搭建项目■ 2.卸载Entity Framework组件,并安装最新版本■ 3.使用EF Code First创建领域模型和EF上下文■ 4.三层架构设计    □ 4.1 创建DAL层        ※ 4.1.1 MySportsStore.IDAL详解        ※ 4.1.2 MySportsStore.DAL详解 1.搭建项目 MySportsStore.

asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对项目的代码始终停留在一知半解的地步,能改一些简单的bug,但关于项目的来龙去脉始终云里雾里.对于asp.net mvc的架构始终看不懂.因此,照着传智博客的学习视频,学了一下简单的架构搭建.真个架构的搭建我看了将近两遍视频,才稍稍有些头绪,今天在这里记录一下,一方面加深理解,一方面如果以后忘记了,还

使用抽象工厂反射获取不到Dal层对象,未能加载文件或程序集......

Put aside the fog and see the essence 解决问题之前,要明白问题为什么会出现 如果只想单纯的解决这个问题的话,直接把错误复制然后百度就会出现很多很多解决方案 如果你想明白为什么会出现这个错误 1.首先了解反射的机制 任何类库编译完成之后都会生成.dll文件,反射就是从当前反射所在的.dll(DBZQ.Answer.Factory.dll)文件查找.dll 2.我们来看一下程序的代码和文件 web.config DalFacoty代码 我们找到web层的bin目

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </sum

EF作为DAL层遇到的问题

今天在部署一个经典三层的项目的时候,用到了EntityFramework,碰到几个问题: 在用EntityFramework将数据库导入到DAL层后,在BL层引用该DAL后,在测试项目的时候,想要查询一个表的结果集,但是发现没有平常熟悉的智能提示,我习惯用ToList(),但是这次只能提示没有出现,我以为是因为dll引用的关系,就自己手写了,但是却给我抛出了三个错误: Error 1 The type 'System.Data.Entity.DbContext' is defined in an