EF增删查改,获取翻页及一对多关系保存与读取的通用示例代码
发布日期:2022-02-01 14:28:11 浏览次数:33 分类:技术文章

本文共 35818 字,大约阅读时间需要 119 分钟。

EF增删查改,获取翻页及一对多关系保存与读取的通用示例代码(以下代码由猛犸代码助手自动生成)

// ****************************************************** // 文件名称(File Name):   Employees.cs// 项目名称(Project Name):猛犸商贸演示系统// 功能描述(Description): 实现 雇员 业务接口(此模块的功能描述与大概流程说明)// 数据表(Tables):        Employees(所用到的数据表,视图,存储过程的说明,如关系比较复杂,则应说明哪些是可擦写的,哪些表为只读的)// 作者(Author):          zhaoshunlu@163.com// 日期(Create Date):     2014-11-01 08:04:39// 参考文档(Reference)(可选): (该档所对应的分析文档,设计文檔)// 引用(Using) (可选)﹕        (开发的系统中引用其它系统的Dll、对象时,要列出其对应的出处,是否与系统有关﹙不清楚的可以不写﹚,以方便制作安装档)// 修改记录(Revision History):(若档案的所有者改变,则需要有修改人员的名字、修改日期及修改理由)//****************************************************** using System;using System.Collections;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.Entity.Validation;using System.Data.Entity.Infrastructure;using System.Linq;using System.Linq.Expressions;using System.Linq.Dynamic;      //Linq to SQL Dynamic 动态查询using System.Reflection;        //反射using Northwind.IDAL;using Northwind.Model;using Northwind.DAL.Common;namespace Northwind.DAL {    ///     /// 实现 雇员 业务接口    ///     /// 
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
public class EmployeesDAL : IEmployees { // 常量TableName和TableFields仅作参考,只有直接以SQL命令查询时(如GetListUseSQL、GetPages)才可能用到 /// /// 表格名称 /// ///
string
const string TableName = "Employees"; /// /// 表格字段集合(字段名称首字母一律大写) /// ///
string
const string TableFields = "EmployeeID,LastName,FirstName,Title,TitleOfCourtesy,BirthDate,HireDate,Address,City,Region,PostalCode,Country,HomePhone,Extension,Photo,Notes,ReportsTo,PhotoPath"; /// /// 默认构造函数 /// public EmployeesDAL() { } #region 为用户返回底层错误、异常信息 /// /// 缓存最后错误,为了返回底层错误给客户端 /// ///
string
private string strLastErr = ""; /// /// 获取最后的最内部的错误异常信息 /// ///
返回最后一条错误/异常信息
///
string
public string GetLastError() { return strLastErr; } /// /// 获取最内部的异常信息 ///
缓存最后错误,为了返回底层错误给客户端. ///
/// 异常对象 /// 方法名称 /// 公司编码 /// 是否创建错误日记 ///
void
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
void
private void SetLastError(System.Exception ex, string methodName = "", string companyCode = "", bool bLog = true) { System.Exception baseEx = ex.GetBaseException();//获取最内部的异常信息 strLastErr = (baseEx != null) ? baseEx.Message : ex.Message; //创建错误日记 if (bLog) LogHelper.CreateLog(strLastErr, this.ToString(), methodName, companyCode); } /// /// 设置最内部的异常信息 /// /// 错误信息 /// 方法名称 /// 公司编码 /// 是否创建错误日记 ///
void
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
void
private void SetLastError(string error, string methodName = "", string companyCode = "", bool bLog = true) { strLastErr = error; //创建错误日记 if (bLog) LogHelper.CreateLog(strLastErr, this.ToString(), methodName, companyCode); } #endregion #region 常规常用CRUD操作 公用成员方法组GetOne()、GetList()、GetListUseSQL、GetPage()、GetPages()、Insert()、Update()、Delete()、Save() #region 获取单个对象(一条记录) /// /// 通过主键获取一条记录(可返回一对多关系的多个子表记录) /// /// 要查询的键值 如: 100 /// 自定义设置查询标志:如all 对象所有信息包括子对象(子表)信息,single 仅仅当前表信息 ///
返回一个Employees对象或者null
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
Northwind.Model.Employees
public Northwind.Model.Employees GetOne(int EmployeeID, string state = "all") { using (NorthwindContext _context = new NorthwindContext()) { Northwind.Model.Employees model = null; //if (state == "all"){ // //获取主表包括一至多个子表记录:多个子表就多次Include,如.Include("子表1s").Include("子表2s") // model = _context.Employeess.Include("子表s").Single(o => o.EmployeeID == EmployeeID); //} else if (state == "single"){ model = _context.Employeess.Find(EmployeeID);//只获取当前表记录(无子表记录) //} if (model == null) { this.strLastErr = string.Format("没有找到EmployeeID={0}记录", EmployeeID); } return model; } } //YourAdminLoginExists //YourUserLoginExists #endregion #region 获取普通列表(无翻页) // 1、ALinq Dynamic (Linq to SQL Dynamic Query) /// /// 使用LINQ动态查询所有或部分记录 /// /// Linq Dynamic查询条件 ///
返回一组Employees集合对象
///
这是一个例子显示如何调用此方法 ///
/// Employeess = bll.GetList(" EnCusCode==\"" + enCusCode + "\" AND SaleDate>=DateTime(2013,9,10)"); /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
IList
public IList
GetList(string conditionLinq) { using (NorthwindContext _context = new NorthwindContext()) { if (!string.IsNullOrEmpty(conditionLinq)) { return _context.Employeess.Where(conditionLinq).ToList(); } else { return _context.Employeess.ToList(); } //排序:.OrderBy(o=>o.lineID); } } ///
/// 使用LINQ动态查询所有或部分记录 /// ,参数selector和conditionLinq不能空 /// ///
返回数量 ///
要查询的匿名对象属性集合字符串 ///
Linq Dynamic查询条件 ///
Linq Dynamic排序属性及方式 ///
返回一组Employees集合对象
///
这是一个例子显示如何调用此方法 ///
/// Employeess = bll.GetListWithLinq(-1, "new(ID,EnCusCode,OrderStatue,UserSeat,SaleDate,Mobile)", " EnCusCode==\"" + enCusCode + "\" AND SaleDate>=DateTime(2013,9,10)", "ID Desc"); /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
IList
public IList
GetList(int top, string selector, string conditionLinq, string order) { using (NorthwindContext _context = new NorthwindContext()) { //参数selector和conditionLinq 不能空 IQueryable
iquery = _context.Employeess.Where(conditionLinq); if (!string.IsNullOrEmpty(order)) { iquery = iquery.OrderBy(order); } if (top > 0) { iquery = iquery.Take(top); } var query = iquery.Select(selector); IList
list = new List
(); PropertyInfo[] props = new PropertyInfo[1]; int len = 0; IEnumerator em = query.GetEnumerator(); //枚举器 while (em.MoveNext()) { Northwind.Model.Employees model = new Northwind.Model.Employees(); if (len == 0) { //初始化属性组 props = em.Current.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); len = props.Length; } //遍历属性赋值(要是一个一个属性赋值真心累) for (int i = 0; i < len; i++) { PropertyInfo pinfo = model.GetType().GetProperty(props[i].Name, BindingFlags.Public | BindingFlags.Instance); if (pinfo != null) pinfo.SetValue(model, props[i].GetValue(em.Current, null), null); } list.Add(model); } return list; } } //2、使用Lambda表达式 ///
/// 使用Lambda表达式查询获取所有或部分记录 /// ///
查询条件 Lambda表达式 ///
返回一组Employees集合对象
///
这是一个例子显示如何调用此方法 ///
/// whereLambda = w => w.LastName.Contains("张");//"张"为查询关键字词 /// IList Employeess = bll.GetList(whereLambda); /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
IList
public IList
GetList(Expression
> whereLambda) { using (NorthwindContext _context = new NorthwindContext()) { return _context.Employeess.Where(whereLambda).ToList();//排序:.OrderBy(o=>o.lineID); } } ///
/// 使用Lambda表达式查询获指定行数的部分记录 /// ///
排序键的数据类型
///
指定返回记录条数 ///
查询条件Lambda表达式 ///
排序Lambda表达式 ///
是否按升序排序,默认false ///
返回一组Employees集合对象
///
这是一个例子显示如何调用此方法 ///
/// whereLambda = w => w.LastName.Contains("张");//"张"为查询关键字词 /// Func whereLambda = w => w.EmployeeID; //按主键排序 /// IList Employeess = bll.GetList(10,whereLambda,orderByLambda,false); /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
IList
public IList
GetList
(int top, Expression
> whereLambda, Expression
> orderLambda, bool isAsc = false) { using (NorthwindContext _context = new NorthwindContext()) { if (top < 1) top = 1; //升序 if (isAsc) { return _context.Employeess.Where(whereLambda).OrderBy
(orderLambda).Take(top).ToList(); } else { return _context.Employeess.Where(whereLambda).OrderByDescending
(orderLambda).Take(top).ToList(); } } } //3、使用原始SQL命令表达式查询 //注意: //以下2个查询记录的方法调用时参数直接使用到了数据表字段名称 //如果数据表字段名称修改了,那么原先调用的程序将会得不到期望的结果甚至导致程序异常。 ///
/// 通过查询获取所有或部分记录 ///
参数
必须是正确的SQL查询条件表达式.表格字段名称必须正确
///
///
查询条件 如: Name like '%张%';为空或者null就返回所有数据 ///
排序方式,默认null,为空或者null则按默认排序 ///
查询记录条数,默认0,小于1则不限制返回行数 ///
返回一组Employees集合对象
///
这是一个例子显示如何调用此方法 ///
/// Employeess = bll.GetList(conditionSQL); /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
IList
public IList
GetListUseSQL(string conditionSQL, string orderSQL = null, int top = 0) { //拼装SQL命令 StringBuilder sbSql = new StringBuilder(); sbSql.Append("SELECT "); if (top > 0) sbSql.AppendFormat(" TOP {0} ", top); // //注意字段名称首字母一律大写 sbSql.Append(" [me].[EmployeeID]"); // 雇员ID sbSql.Append(",[me].[LastName]"); // 姓氏 sbSql.Append(",[me].[FirstName]"); // 名称 sbSql.Append(",[me].[Title]"); // 职位 sbSql.Append(",[me].[TitleOfCourtesy]"); // 尊称 sbSql.Append(",[me].[BirthDate]"); // 出生日期 sbSql.Append(",[me].[HireDate]"); // 雇用日期 sbSql.Append(",[me].[Address]"); // 地址 sbSql.Append(",[me].[City]"); // 城市 sbSql.Append(",[me].[Region]"); // 地区 sbSql.Append(",[me].[PostalCode]"); // 邮政编码 sbSql.Append(",[me].[Country]"); // 国家 sbSql.Append(",[me].[HomePhone]"); // 家庭电话 sbSql.Append(",[me].[Extension]"); // 电话分机 sbSql.Append(",[me].[Photo]"); // 照片 sbSql.Append(",[me].[Notes]"); // 备注 sbSql.Append(",[me].[ReportsTo]"); // 上级雇员 sbSql.Append(",[me].[PhotoPath]"); // 图片路径 sbSql.Append(" FROM [Employees] AS [me] "); //条件 if (!string.IsNullOrEmpty(conditionSQL)) sbSql.AppendFormat(" WHERE {0}", conditionSQL); //排序 if (!string.IsNullOrEmpty(orderSQL)) sbSql.AppendFormat(" ORDER BY {0}", orderSQL); // string sql = sbSql.ToString(); DataTable dt = DBUtil.GetDataTable(sql, null); IList
list = new List
(); if (dt != null && dt.Rows.Count > 0) { PropertyInfo[] props = new PropertyInfo[1]; int columnCount = dt.Columns.Count; for (int i = 0; i < dt.Rows.Count; i++) { Northwind.Model.Employees model = new Northwind.Model.Employees(); //遍历属性赋值 for (int j = 0; j < columnCount; j++) { PropertyInfo pinfo = model.GetType().GetProperty(dt.Columns[j].ColumnName, BindingFlags.Public | BindingFlags.Instance); if (pinfo != null) { if (dt.Rows[i][j] != DBNull.Value) { pinfo.SetValue(model, dt.Rows[i][j], null); } else { // 默认值 } } } list.Add(model); } } return list; } ///
/// 通过原始SQL命令查询获取所有或部分记录 /// 必须是正确的SQL查询条件表达式. /// ///
指定返回记录条数,小于1则不限制返回行数 ///
投影字段,null或者""或者"*"返回所有字段 ///
查询条件如:SaleItem like '%张%' ///
排序如:ID Desc ///
DataTable
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
DataTable
public DataTable GetTableUseSQL(int top, string selector, string conditionSQL, string orderSQL) { StringBuilder sbSQL = new StringBuilder("SELECT "); if (top > 0) sbSQL.AppendFormat(" TOP {0} ", top); if (string.IsNullOrEmpty(selector) || selector == "*") sbSQL.Append(selector); else sbSQL.Append(selector); // sbSQL.Append(" FROM Employees"); //条件 if (!string.IsNullOrEmpty(conditionSQL)) sbSQL.AppendFormat(" WHERE {0}", conditionSQL); //排序 if (!string.IsNullOrEmpty(orderSQL)) sbSQL.AppendFormat(" ORDER BY {0}", orderSQL); return DBUtil.GetDataTable(sbSQL.ToString(), null); } #endregion #region 获取翻页列表 ///
/// 通过Linq 动态查询获取所有或部分记录, ///
按指定的字段或者属性名称进行排序,只能对一个字段进行排序,
///
并将结果进行分页
///
参数
是对象的属性名称,不是表格字段名称.
///
///
每页数据行数 ///
当前页面 ///
Linq查询条件表达式 ///
是否按升序排序 ///
要排序的属性名称(不是字段名称) ///
输出总记录条数 ///
返回一组Employees集合对象
///
这是一个例子显示如何调用此方法 ///
/// =DateTime(2013,9,10) AND YourContent.Contains(\"" + enCusCode + "\")" //key为查询关键字词 如"张" /// string propertyName = "name"; //按字段 name 进行排序 /// bool isAsc = false; //默认按降序排序 /// int total = 0; //缓存方法输出的数据总行数 /// IList Employeess = bll.GetPage(pageSize, pageIndex, conditionLinq, isAsc, propertyName, out total); /// //遍历所有记录 /// //foreach (Northwind.Model.Employees model in Employeess) /// //{ /// // model. /// //} /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
IList
public IList
GetPage(int pageSize, int pageIndex, string conditionLinq, bool isAsc, string propertyName, out int total) { using (NorthwindContext _context = new NorthwindContext()) { total = 0; if (pageSize < 1) pageSize = 10; if (pageIndex < 0) pageIndex = 0; //先查询出数据 IQueryable
query; if (string.IsNullOrEmpty(conditionLinq)) { query = (isAsc) ? _context.Employeess.OrderBy(propertyName + " ASC") : _context.Employeess.OrderBy(propertyName + " DESC"); total = query.Count(); } else { query = (isAsc) ? _context.Employeess.Where(conditionLinq).OrderBy(propertyName + " ASC") : _context.Employeess.Where(conditionLinq).OrderBy(propertyName + " DESC"); total = query.Count(); } //分页 IList
pageList = query.Skip(pageSize * pageIndex).Take(pageSize).ToList(); return pageList; } } //注意: //以下查询翻页记录的方法调用时参数直接使用到了数据表字段名称 //如果数据表字段名称修改了,那么原先调用的程序将会得不到期望的结果甚至导致程序异常。 ///
///
通过原始的SQL命令查询获取所有或部分记录,可以从表格或者视图获取记录,
///
按指定的字段或者属性名称进行排序,只能对一个字段进行排序,
///
并将结果进行分页
///
参数
必须是正确的SQL查询条件表达式.表格字段名称必须正确
///
参数
必须是表格字段名称.
///
///
每页数据行数 ///
当前页面 ///
SQL查询条件表达式 ///
是否按升序排序 ///
要排序的属性名称(字段名称) ///
总记录条数,如果pageIndex=0 或者total=0,就查询总记录数,否则就不查询总记录数 ///
是否进行服务端统计,默认false不统计 ///
返回一个哈希表
///
这是一个例子显示如何调用此方法 ///
/// 每一项一行数据; /// //result["total"] 是 总记录数; /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
Hashtable
public Hashtable GetPages(int pageSize, int pageIndex, string conditionSQL, bool isAsc, string sortField, int total, bool bStatistics = false) { //拼装SQL命令 StringBuilder sbSql = new StringBuilder(); sbSql.Append("SELECT "); //注意字段名称首字母一律大写 sbSql.Append(" [me].[EmployeeID]"); // 雇员ID sbSql.Append(",[me].[LastName]"); // 姓氏 sbSql.Append(",[me].[FirstName]"); // 名称 sbSql.Append(",[me].[Title]"); // 职位 sbSql.Append(",[me].[TitleOfCourtesy]"); // 尊称 sbSql.Append(",[me].[BirthDate]"); // 出生日期 sbSql.Append(",[me].[HireDate]"); // 雇用日期 sbSql.Append(",[me].[Address]"); // 地址 sbSql.Append(",[me].[City]"); // 城市 sbSql.Append(",[me].[Region]"); // 地区 sbSql.Append(",[me].[PostalCode]"); // 邮政编码 sbSql.Append(",[me].[Country]"); // 国家 sbSql.Append(",[me].[HomePhone]"); // 家庭电话 sbSql.Append(",[me].[Extension]"); // 电话分机 sbSql.Append(",[me].[Photo]"); // 照片 sbSql.Append(",[me].[Notes]"); // 备注 sbSql.Append(",[me].[ReportsTo]"); // 上级雇员 sbSql.Append(",[me].[PhotoPath]"); // 图片路径 sbSql.Append(" FROM [Employees] AS [me] "); // string sql = sbSql.ToString(); //统计总记录的SQL命令 StringBuilder sbSQLCnt = new StringBuilder("Select Count(*) FROM [Employees] AS [me] "); // string sqlCnt = sbSQLCnt.ToString(); if (!string.IsNullOrEmpty(conditionSQL)) { sql += " WHERE " + conditionSQL; sqlCnt += " WHERE " + conditionSQL; } string strOrderBy = ""; if (!string.IsNullOrEmpty(sortField)) { strOrderBy = " ORDER BY " + sortField; if (!isAsc) strOrderBy += " desc"; } // Hashtable result = new Hashtable(); //查询数据库 //调用公共数据库操作类DBUtil获取记录(支持翻页) IList
data = new List
(); if (pageIndex == 0 || total == 0) { //第一页 data = DBUtil.GetPages(pageSize, pageIndex, sql, sqlCnt, strOrderBy, out total); // if (bStatistics) { //进行服务端统计 Hashtable tjTab = GetStatistics(conditionSQL); foreach (DictionaryEntry de in tjTab) { result[de.Key.ToString()] = de.Value; } } } else { //第二页及之后就不需要再次获取总记录行数 data = DBUtil.GetPages(pageSize, pageIndex, sql, strOrderBy); } //准备返回值 result["data"] = data; //一个页面的数据集 result["total"] = total; //总记录条数 //返回结果 return result; } ///
/// 通过原始SQL命令查询获取所有或部分记录 /// 必须是正确的SQL查询条件表达式. /// ///
每页数据行数 ///
当前页面 ///
SQL查询条件表达式 ///
是否按升序排序 ///
要排序的属性名称(字段名称) ///
总记录条数,如果pageIndex=0 或者total=0,就查询总记录数,否则就不查询总记录数 ///
是否进行服务端统计,默认false不统计 ///
DataTable
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
DataTable
public DataTable GetTable(int pageSize, int pageIndex, string conditionSQL, bool isAsc, string sortField, out int total, bool bStatistics = false) { total = 0; if (pageSize < 1) pageSize = 10; pageIndex = (pageIndex <= 1) ? 0 : pageIndex - 1;//第一页页码必须以0开始 //拼装SQL命令 StringBuilder sbSql = new StringBuilder(); sbSql.Append("SELECT "); //注意字段名称首字母一律大写 sbSql.Append(" [me].[EmployeeID]"); // 雇员ID sbSql.Append(",[me].[LastName]"); // 姓氏 sbSql.Append(",[me].[FirstName]"); // 名称 sbSql.Append(",[me].[Title]"); // 职位 sbSql.Append(",[me].[TitleOfCourtesy]"); // 尊称 sbSql.Append(",[me].[BirthDate]"); // 出生日期 sbSql.Append(",[me].[HireDate]"); // 雇用日期 sbSql.Append(",[me].[Address]"); // 地址 sbSql.Append(",[me].[City]"); // 城市 sbSql.Append(",[me].[Region]"); // 地区 sbSql.Append(",[me].[PostalCode]"); // 邮政编码 sbSql.Append(",[me].[Country]"); // 国家 sbSql.Append(",[me].[HomePhone]"); // 家庭电话 sbSql.Append(",[me].[Extension]"); // 电话分机 sbSql.Append(",[me].[Photo]"); // 照片 sbSql.Append(",[me].[Notes]"); // 备注 sbSql.Append(",[me].[ReportsTo]"); // 上级雇员 sbSql.Append(",[me].[PhotoPath]"); // 图片路径 sbSql.Append(" FROM [Employees] AS [me] "); // string sql = sbSql.ToString(); //统计总记录的SQL命令 StringBuilder sbSQLCnt = new StringBuilder("Select Count(*) FROM [Employees] AS [me] "); // string sqlCnt = sbSQLCnt.ToString(); if (!string.IsNullOrEmpty(conditionSQL)) { sql += " WHERE " + conditionSQL; sqlCnt += " WHERE " + conditionSQL; } string strOrderBy = ""; if (!string.IsNullOrEmpty(sortField)) { strOrderBy = " ORDER BY " + sortField; if (!isAsc) strOrderBy += " desc"; } // //DataTable data = new DataTable(); DataSet dataSet = new DataSet(); if (pageIndex == 0) { //第一页 dataSet = DBUtil.GetDataSet(pageSize, pageIndex, sql, sqlCnt, strOrderBy); // if (bStatistics) { //进行服务端统计 //Hashtable tjTab = GetStatistics(conditionSQL); //foreach (DictionaryEntry de in tjTab) { // result[de.Key.ToString()] = de.Value; //} } total = Convert.ToInt32(dataSet.Tables[1].Rows[0][0].ToString()); } else { //第二页及之后就不需要再次获取总记录行数 dataSet = DBUtil.GetDataSet(pageSize, pageIndex, sql, "", strOrderBy); } //返回结果 return dataSet.Tables[0]; } ///
/// 所有翻页内的数据统计,如果没有用到统计业务就可以删除此方法 /// ///
///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
Hashtable
private Hashtable GetStatistics(string conditionSQL) { Hashtable result = new Hashtable(); /* 应用举例 查询订单 人数及销售金额及利润 * 如果没有用到统计业务就可以删除此方法 * //拼装查询SQL命令 //在查询条件“conditionSQL”中可能用到查询的字段都要列出来 StringBuilder sbSql = new StringBuilder(); sbSql.Append("SELECT * FROM ("); sbSql.Append("SELECT "); //注意字段名称首字母一律大写 //要统计的字段 bSql.Append(" ,[me].[AdultNum]"); // 大人数 sbSql.Append(",[me].[Childnum]"); // 小孩数 sbSql.Append(",[me].[BranchSaleTotal]"); // 销售金额 sbSql.Append(",[me].[SaleTotal]"); // 地接金额 sbSql.Append(",[me].[Profit]"); // 毛利 //要查询参数的字段 sbSql.Append(",[me].[OtherDate]"); // 消费日期 sbSql.Append(",[T_SaleHoliday].[Customer]"); //客人姓名 //来源表格 sbSql.Append(" FROM [T_SaleHoliday_other] AS [me] "); sbSql.Append(" LEFT JOIN [T_SaleHoliday] ON T_SaleHoliday.SaleOrderID = me.SaleOrderID"); // sbSql.Append(" ) AS My_View "); //创建视图 //接上查询条件 if (!string.IsNullOrEmpty(conditionSQL)) { sbSql.Append(" WHERE " + conditionSQL); } string sql = sbSql.ToString(); //拼装统计SQL命令 StringBuilder orSQL = new StringBuilder(); orSQL.Append("select sum(AdultNum) as AdultNum,sum(Childnum) as Childnum,sum(BranchSaleTotal) as BranchSaleTotal,sum(SaleTotal) as SaleTotal,sum(Profit) as Profit from ("); orSQL.Append(sql); orSQL.Append(" ) as T"); // DataTable dt = DBUtil.GetDataTable(orSQL.ToString(), null); if (dt != null && dt.Rows.Count > 0) { result["AdultNum"] = (dt.Rows[0]["AdultNum"] != DBNull.Value) ? Convert.ToInt32(dt.Rows[0]["AdultNum"].ToString()) : 0; // 大人统计数 result["Childnum"] = (dt.Rows[0]["Childnum"] != DBNull.Value) ? Convert.ToInt32(dt.Rows[0]["Childnum"].ToString()) : 0; // 小孩统计数 // result["BranchSaleTotal"] = (dt.Rows[0]["BranchSaleTotal"] != DBNull.Value) ? Convert.ToDecimal(dt.Rows[0]["BranchSaleTotal"].ToString()) : 0; // 销售统计金额 result["SaleTotal"] = (dt.Rows[0]["SaleTotal"] != DBNull.Value) ? Convert.ToDecimal(dt.Rows[0]["SaleTotal"].ToString()) : 0; // 地接统计金额 result["Profit"] = (dt.Rows[0]["Profit"] != DBNull.Value) ? Convert.ToDecimal(dt.Rows[0]["Profit"].ToString()) : 0; // 毛利统计 } */ //准备返回 return result; } #endregion // #region 增删改操作 ///
/// 插入一条新记录(可以事务方式保存一对多关系的多个表格数据) /// ///
要添加的实体对象 ///
插入成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
bool
public bool Insert(Northwind.Model.Employees model) { if (model == null) { this.strLastErr = "要保存的对象为null"; return false; } using (NorthwindContext _context = new NorthwindContext()) { //-- 插入前判断(如属性/字段值是否已经存在) //if (_context.Employeess.Any(o => o.属性名称 == model.属性名称)) { // this.strLastErr = "已经存在" + model.属性名称 + "的记录"; // return false; //} //如果有子表记录,_context.SaveChanges()将以事务方式同时保存 //一是直接创建对象,然后调用“DbSet”的”Add()”方法进行添加 _context.Employeess.Add(model); //二是调用数据库上下文的”Entry()”方法并设置对应的状态。 //DbEntityEntry
entity = _context.Entry(model); //此时entity的State 是 System.Data.EntityState.Detached //entity.State = EntityState.Added;//于_context而言,model是一个全新、外来、陌生的对象,所以把状态强制更改为EntityState.Added, //或者直接写成 //_context.Entry(model).State = EntityState.Added; try { return _context.SaveChanges() > 0; } catch (DbEntityValidationException dvEx) { DbValidationError dvError = dvEx.EntityValidationErrors.First().ValidationErrors.First(); SetLastError("属性" + dvError.PropertyName + "错误:" + dvError.ErrorMessage, "Insert()"); // return false; } catch (System.Exception ex) { SetLastError(ex); return false; } } } ///
/// 修改原有的一条记录(可以事务方式更新一对多关系的多个表格数据) ///
注意如果只设置了对象部分属性值请勿使用此方法保存数据,保存后会导致记录行原来字段数据丢失
///
///
要修改的实体对象 ///
更新成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
bool
public bool Update(Northwind.Model.Employees model) { if (model == null) { this.strLastErr = "要保存的对象为null"; return false; } using (NorthwindContext _context = new NorthwindContext()) { //-- 更新前判断(如属性/字段值是否已经存在) //if (_context.Employeess.Any(o => o.EmployeeID != model.EmployeeID && o.属性名称 == model.属性名称 )) { // this.strLastErr = "已经存在" + model.属性名称 + "的记录"; // return false; //} try { //如果有子表记录,_context.SaveChanges()不会保存更新子表记录, //这个问题目前只好手动保存更新子表了。 // //无子表对象可删除下面多余代码 //for (int i = 0; i < model.子表s.Count; i++) { // 子表 mod = model.子表s[i]; // //如果不是新建,而是修改或者删除状态,就要先查找到对象 // //判断是否新增,最好判断自动编号是否为0 // if ((mod._state == "null" || mod._state == "added")) { // _context.子表s.Add(mod); // } else if (mod._state == "modified") { // //方式1、直接修改状态 // _context.Entry(mod).State = EntityState.Modified; // //方式2、通过复制对象值 // //DbEntityEntry
<子表>
entity = _context.Entry(_context.子表s.Find(mod.ID)); // //entity.CurrentValues.SetValues(mod);//如果是修改状态就要重新复制对象值 // } else if (mod._state == "removed") { // //方式1、直接删除 // //_context.子表.Remove(mod); // //方式2、实体实例使用Attach方法 // _context.子表.Remove(_context.子表.Attach(mod)); // } //} //model.子表s.Clear();//清除过期的子表记录 //保存记录 //方式1、直接修改状态,更新所有字段 //_context.Entry(model).State = EntityState.Modified; //方式2、新旧记录进行对比,只更新有修改的字段 Employees thisModel = _context.Employeess.Find(model.EmployeeID); string[] names = DataValidator.UpdateDifferent(thisModel, model); //根据新对象更改旧对象属性值 // return _context.SaveChanges() > 0; } catch (DbEntityValidationException dvEx) { DbValidationError dvError = dvEx.EntityValidationErrors.First().ValidationErrors.First(); SetLastError("属性" + dvError.PropertyName + "错误:" + dvError.ErrorMessage, "Update()"); return false; } catch (System.Exception ex) { SetLastError(ex); return false; } } } ///
/// 更新表单提交的数据(可以事务方式更新一对多关系的多个表格数据) ///
必须指定要修改的属性名称集合
///
///
要修改的实体对象 ///
要修改的属性名称集合 ///
特别指定需要排除的属性键集合,默认为null ///
更新成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
bool
public bool UpdateForm(Northwind.Model.Employees model, string[] SetKes = null, string[] FilterKeys = null) { if (model == null) { this.strLastErr = "要保存的对象为null"; return false; } if (SetKes == null || (SetKes != null && SetKes.Length == 0)) { this.strLastErr = "没有指订要修改的属性名称集合"; return false; } using (NorthwindContext _context = new NorthwindContext()) { //-- 更新前判断(如属性/字段值是否已经存在) //if (_context.Employeess.Any(o => o.EmployeeID != model.EmployeeID && o.属性名称 == model.属性名称 )) { // this.strLastErr = "已经存在" + model.属性名称 + "的记录"; // return false; //} try { //如果有子表记录,_context.SaveChanges()不会保存更新子表记录, //这个问题目前只好手动保存更新子表了。 // //无子表对象可删除下面多余代码 //for (int i = 0; i < model.子表s.Count; i++) { // 子表 mod = model.子表s[i]; // //如果不是新建,而是修改或者删除状态,就要先查找到对象 // //判断是否新增,最好判断自动编号是否为0 // if ((mod._state == "null" || mod._state == "added")) { // _context.子表s.Add(mod); // } else if (mod._state == "modified") { // //方式1、直接修改状态 // _context.Entry(mod).State = EntityState.Modified; // //方式2、通过复制对象值 // //DbEntityEntry
<子表>
entity = _context.Entry(_context.子表s.Find(mod.ID)); // //entity.CurrentValues.SetValues(mod);//如果是修改状态就要重新复制对象值 // } else if (mod._state == "removed") { // //方式1、直接删除 // //_context.子表.Remove(mod); // //方式2、实体实例使用Attach方法 // _context.子表.Remove(_context.子表.Attach(mod)); // } //} //model.子表s.Clear();//清除过期的子表记录 // //添加到EF管理容器中 DbEntityEntry
entity = _context.Entry
(model); entity.State = System.Data.EntityState.Unchanged; //标识 实体对象 某些属性 已经被修改了 for (int i = 0; i < SetKes.Length; i++) { if (!string.IsNullOrEmpty(SetKes[i])) { //怎么判断他是无映射到属性?非映射属性不能存,目前暂时靠 FilterKeys 来跳过了 if (FilterKeys != null && FilterKeys.Contains(SetKes[i])) { //跳过指定要排除的属性 } else { entity.Property(SetKes[i]).IsModified = true; //做修改标志 } } } // return _context.SaveChanges() > 0; } catch (DbEntityValidationException dvEx) { DbValidationError dvError = dvEx.EntityValidationErrors.First().ValidationErrors.First(); SetLastError("属性" + dvError.PropertyName + "错误:" + dvError.ErrorMessage, "UpdateForm()"); return false; } catch (System.Exception ex) { SetLastError(ex); return false; } } } ///
/// 通过主键删除一条或多条记录(通过判断参数中的逗号分隔符来决定是否删除多条记录) /// ///
要删除的键值,如24,或者是以逗号分隔的主键集合,如:2,34,50,36 ///
公司编码 ///
操作人名称 ///
删除成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
bool
public bool Delete(string Keys, string CompanyCode = null, string OpMaker = null) { if (string.IsNullOrEmpty(Keys)) { this.strLastErr = "参数为空值"; return false; } using (NorthwindContext _context = new NorthwindContext()) { //int bool ischg = false; if (Keys.IndexOf(",") < 1) { //删除一条记录 //if (DataValidator.IsNumber(Keys)) { //如果主键是数字类型,启用参数验证 int EmployeeID = Convert.ToInt32(Keys); Northwind.Model.Employees model = _context.Employeess.Find(EmployeeID); if (model != null) { //-- 删除前判断(如记录是否被使用或者存在子表数据) //if (_context.子表类名s.Any(o => o.EmployeeID == EmployeeID)) { // //已经有子表,不能删除 // this.strLastErr = mod.标题 + "已经有子表记录,不能删除"; //}else{ //--删除 _context.Employeess.Remove(model); ischg = true; //} } else { this.strLastErr = string.Format("没有找到EmployeeID={0}记录", Keys); } //} else { // this.strLastErr = string.Format("参数EmployeeID={0}错误", Keys); //} } else { // 删除多条记录 string[] ids = Keys.Split(new char[] { ',' }); int EmployeeID; for (int i = ids.Length - 1; i >= 0; i--) { //if (DataValidator.IsNumber(ids[i])) {//如果主键是数字类型,启用参数验证 EmployeeID = Convert.ToInt32(ids[i]); Northwind.Model.Employees model = _context.Employeess.Find(EmployeeID); if (model != null) { //-- 删除前判断(如记录是否被使用或者存在子表数据) //if (_context.子表类名s.Any(o => o.EmployeeID == mod.EmployeeID)) { // //已经有子表,不能删除 // this.strLastErr = mod.标题 + "已经有子表记录,不能删除"; // ischg = false; // break; //}else{ //--删除 _context.Employeess.Remove(model); if (!ischg) ischg = true; //} } //} else { // this.strLastErr = string.Format("参数EmployeeID={0}错误", ids[i]); // ischg = false; // break; //} } } if (ischg) {//需要提交更新 try { return _context.SaveChanges() > 0; } catch (System.Exception ex) { SetLastError(ex); return false; } } else return false; } } ///
/// 通过主键删除一条或多条记录(通过判断参数中的逗号分隔符来决定是否删除多条记录),并输出要删除的文件列表 /// ///
要删除的主键集合(以逗号,分隔) ///
输出要删除的文件列表 ///
操作人名称 ///
删除成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// files = new List(); /// Northwind.BLL.EmployeesBLL bll = new Northwind.BLL.EmployeesBLL(); /// bll.Delete("2,34,50,36",out files); /// ]]> /// ///
///
/// 创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39 ///
修改人、日期及内容:
///
///
bool
public bool Delete(string Keys, out IList
files, string OpMaker = null) { files = new List
(); //需要时请重新编写方法输出要删除的文件列表 //你的代码 return Delete(Keys); } #endregion #region 保存与批量保存操作 ///
/// 保存数据单个对象(一条记录) /// ///
///
保存成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
///
使用页面:
///
创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39
///
修改人、日期及内容:
///
///
bool
public bool Save(Northwind.Model.Employees model) { if (model == null) return false; //判断主键是否为0或者为空 //要求表必须有自动增长字段,如果没有自增字段,主键为字符串字段,请自行判断 //if (string.IsNullOrEmpty(model.EmployeeID)) if (model.EmployeeID == 0) { return Insert(model); } else { return Update(model); } } ///
/// 批量保存多条记录(可以混合删除、新增、修改操作) /// ///
///
保存成功返回true,失败返回false
///
这是一个例子显示如何调用此方法 ///
/// /// ///
///
///
使用页面:
///
创建人及日期:zhaoshunlu@163.com 2014-11-01 08:04:39
///
修改人、日期及内容:
///
///
bool
public bool Save(IList
models) { if (models == null || models.Count == 0) { this.strLastErr = "要保存的对象为null或者数量为0"; return false; } using (NorthwindContext _context = new NorthwindContext()) { int cnt = 0;//计数器 for (int i = models.Count - 1; i >= 0; i--) { Northwind.Model.Employees mod = models[i]; //如果不是新建,而是修改或者删除状态,就要先查找到对象 //判断是否新增,最好判断自动编号是否为0 if ((mod._state == "null" || mod._state == "added")) { _context.Employeess.Add(mod); cnt++; } else if (mod._state == "modified") { //直接修改状态 _context.Entry(mod).State = EntityState.Modified; //通过复制对象值 //DbEntityEntry
entity = _context.Entry(_context.Employeess.Find(mod.EmployeeID)); //entity.CurrentValues.SetValues(mod);//如果是修改状态就要重新复制对象值 cnt++; } else if (mod._state == "removed") { //直接删除 //_context.Employeess.Remove(mod); //实体实例使用Attach方法 _context.Employeess.Remove(_context.Employeess.Attach(mod)); cnt++; } mod._state = "null";//生成静态Json数据时需要重置这个状态值, } //提交保存 try { if (cnt > 0) { return _context.SaveChanges() > 0; } else { strLastErr = "没有需要更新的数据"; return false; } } catch (System.Exception ex) { SetLastError(ex); return false; } } } #endregion #endregion //以下是 你的自定义业务逻辑 #region 你的自定义业务逻辑 // // // #endregion }}

转载地址:https://blog.csdn.net/shunlu/article/details/40677199 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:猛犸Winform分页控件
下一篇:ASP调用存储过程,并获取异常信息

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年03月07日 14时58分31秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java国际化bundle_java语言国际化--ResouceBundle、struts 2019-04-21
java图片延迟加载_jQuery实现图片延迟加载 2019-04-21
java开发加入购物车功能_java web开发——购物车功能实现 2019-04-21
Java虚拟机不能满足_深入理解Java虚拟机--读书笔记1/3 2019-04-21
python 协程 asyncio_python – asyncio.as_completed是否会产生期货或协同程序? 2019-04-21
java设定xml文件的encoding_配置web-xml解决中文乱码问题,及各种乱码问题集结 2019-04-21
hanlp java api_java分词工具hanlp介绍 2019-04-21
nginx php 源码安装,Nginx1.12.2加php7.2.0的编译安装 2019-04-21
php 删除字节,php – 删除无效/不完整的多字节字符 2019-04-21
php 实现版本号对比,如何在PHP中实现比较版本号 2019-04-21
php sql 给数据库追加内容,php如何向数据库中的某串数据后追加内容【急】 2019-04-21
php微信小程序获取用户信息,微信小程序授权获取用户详细信息openid的实例详解... 2019-04-21
Java三元运算和if,Java三元运算符与<JDK8兼容性中的if / else 2019-04-21
graphql-php enum,php – 如何在不写长查询的情况下查询所有的GraphQL类型字段? 2019-04-21
php date 函数用法,php中date()日期时间函数使用方法 2019-04-21
php除法获取整数和余数,PHP除法取整和取余数 2019-04-21
java迷宫路径,Java中的迷宫路径查找器 2019-04-21
php substr cnblog,php中substr用法示例 2019-04-21
php链接怎么截取,PHP 截取网页中的固定种子链接 2019-04-21
iis运行不起来php报500,解决IIS上安装thinkphp6运行报500错误 2019-04-21