业务层主要负责定义业务逻辑(规则、工作流、数据完整性等),接收来自表示层的数据请求,逻辑判断后,向数据访问层提交请求,并传递数据访问结果,业务逻辑层实际上是一个中间件,起着承上启下的重要作用。
在我们的项目中,所有的数据库语句和和逻辑判断尽量写在业务层(IA.Business)里面,这样既能规范层级的作用,同时也规范团队协作的标准,我们在业务层中的类都以实体类名称加上Bll来命名(如:Base_SysLogBll.cs)。
首先,我们需要创建业务类IA.Business:
创建好之后,我们需要引入Bobo.DataAccess.dll和Bobo.Repository.dll、Bobo.Utilities.dll程序集,以及IA.Entity实体。
然后我们需要根据实体类,创建对应的Bll业务类,如:
using Bobo.Repository; using IA.Entity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IA.Business { // <summary> /// 文章信息表 /// <author> /// <name>YHB</name> /// <date>2018.10.18</date> /// </author> /// </summary> public class Com_ArticleBll : RepositoryFactory<Com_Article> { } }
这样我们依次把我们需要用的业务类建好,并通过业务仓储工厂继承IRepository接口(: RepositoryFactory<Com_Article>) 我们可以为不同的业务类创建不同的文件夹存放,比如系统的基础业务类,如Base_SysLogBll.cs、Base_DataDictionaryDetailBll.cs、Base_ProvinceCityBll.cs、Base_UserBll.cs等,我们把他放在SystemBusiness文件夹下,这样可以跟常规业务类划分开来。
下面,我们重点列出这几个业务类文件的方法内容,这些方法内容都是一般常规系统会用到的,其他一些特殊或者将会用到的,会在后续边用的过程中,在写入进去,包括其他常规的业务类。
(1)Base_SysLogBll
using Bobo.DataAccess; using Bobo.DataAccess.DataBase; using Bobo.Repository; using Bobo.Utilities; using Bobo.Utilities.Membership; using IA.Entity; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; namespace IA.Business.SystemBusiness { /// <summary> /// 系统日志表 /// <author> /// <name>YHB</name> /// <date>2018.08.18</date> /// </author> /// </summary> public class Base_SysLogBll : RepositoryFactory<Base_SysLog> { #region 静态实例化 private static Base_SysLogBll item; public static Base_SysLogBll Instance { get { if (item == null) { item = new Base_SysLogBll(); } return item; } } #endregion public Base_SysLog SysLog = new Base_SysLog(); #region 写入操作日志 /// <summary> /// 写入作业日志 /// </summary> /// <param name="ObjectId">对象主键</param> /// <param name="OperationType">操作类型</param> /// <param name="State">状态</param> /// <param name="Remark">操作说明</param> /// <returns></returns> public void WriteLog(string ObjectId, OperationType OperationType, string State, string Remark = "") { SysLog.SysLogId = CommonHelper.GetGuid(); SysLog.ObjectId = ObjectId; SysLog.LogType = CommonHelper.GetString((int)OperationType); if (ManageProvider.Provider.IsOverdue()) { SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress; SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName; SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId; SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId; SysLog.CreateUserId = ManageProvider.Provider.Current().UserId; SysLog.CreateUserName = ManageProvider.Provider.Current().UserName; } SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId")); SysLog.Remark = Remark; SysLog.Status = State; ThreadPool.QueueUserWorkItem(new WaitCallback(WriteLogUsu), SysLog);//放入异步执行 } private void WriteLogUsu(object obSysLog) { Base_SysLog VSysLog = (Base_SysLog)obSysLog; DataFactory.Database().Insert(VSysLog); } /// <summary> /// 写入作业日志(新增操作) /// </summary> /// <param name="entity">实体对象</param> /// <param name="OperationType">操作类型</param> /// <param name="State">状态</param> /// <param name="Remark">操作说明</param> /// <returns></returns> public void WriteLog<T>(T entity, OperationType OperationType, string State, string Remark = "") { IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { SysLog.SysLogId = CommonHelper.GetGuid(); SysLog.ObjectId = DatabaseCommon.GetKeyFieldValue(entity).ToString(); SysLog.LogType = CommonHelper.GetString((int)OperationType); SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress; SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName; SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId; SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId; SysLog.CreateUserId = ManageProvider.Provider.Current().UserId; SysLog.CreateUserName = ManageProvider.Provider.Current().UserName; SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId")); if (Remark == "") { SysLog.Remark = DatabaseCommon.GetClassName<T>(); } SysLog.Remark = Remark; SysLog.Status = State; database.Insert(SysLog, isOpenTrans); //添加日志详细信息 Type objTye = typeof(T); foreach (PropertyInfo pi in objTye.GetProperties()) { object value = pi.GetValue(entity, null); if (value != null && value.ToString() != " " && value.ToString() != "") { Base_SysLogDetail syslogdetail = new Base_SysLogDetail(); syslogdetail.SysLogDetailId = CommonHelper.GetGuid(); //syslogdetail.SysLogId = SysLog.SysLogId; syslogdetail.PropertyField = pi.Name; syslogdetail.PropertyName = DatabaseCommon.GetFieldText(pi); syslogdetail.NewValue = "" + value + ""; database.Insert(syslogdetail, isOpenTrans); } } database.Commit(); } catch { database.Rollback(); } } /// <summary> /// 写入作业日志(更新操作) /// </summary> /// <param name="oldObj">旧实体对象</param> /// <param name="newObj">新实体对象</param> /// <param name="OperationType">操作类型</param> /// <param name="State">状态</param> /// <param name="Remark">操作说明</param> /// <returns></returns> public void WriteLog<T>(T oldObj, T newObj, OperationType OperationType, string State, string Remark = "") { IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { SysLog.SysLogId = CommonHelper.GetGuid(); SysLog.ObjectId = DatabaseCommon.GetKeyFieldValue(newObj).ToString(); SysLog.LogType = CommonHelper.GetString((int)OperationType); SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress; SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName; SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId; SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId; SysLog.CreateUserId = ManageProvider.Provider.Current().UserId; SysLog.CreateUserName = ManageProvider.Provider.Current().UserName; SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId")); if (Remark == "") { SysLog.Remark = DatabaseCommon.GetClassName<T>(); } SysLog.Remark = Remark; SysLog.Status = State; database.Insert(SysLog, isOpenTrans); //添加日志详细信息 Type objTye = typeof(T); foreach (PropertyInfo pi in objTye.GetProperties()) { object oldVal = pi.GetValue(oldObj, null); object newVal = pi.GetValue(newObj, null); if (!Equals(oldVal, newVal)) { if (oldVal != null && oldVal.ToString() != " " && oldVal.ToString() != "" && newVal != null && newVal.ToString() != " " && newVal.ToString() != "") { Base_SysLogDetail syslogdetail = new Base_SysLogDetail(); syslogdetail.SysLogDetailId = CommonHelper.GetGuid(); //syslogdetail.SysLogId = SysLog.SysLogId; syslogdetail.PropertyField = pi.Name; syslogdetail.PropertyName = DatabaseCommon.GetFieldText(pi); syslogdetail.NewValue = "" + newVal + ""; syslogdetail.OldValue = "" + oldVal + ""; database.Insert(syslogdetail, isOpenTrans); } } } database.Commit(); } catch { database.Rollback(); } } /// <summary> /// 写入作业日志(删除操作) /// </summary> /// <param name="oldObj">旧实体对象</param> /// <param name="KeyValue">对象主键</param> /// <param name="State">状态</param> /// <param name="Remark">操作说明</param> public void WriteLog<T>(string[] KeyValue, string State, string Remark = "") where T : new() { IDatabase database = DataFactory.Database(); DbTransaction isOpenTrans = database.BeginTrans(); try { foreach (var item in KeyValue) { T Oldentity = database.FindEntity<T>(item.ToString()); SysLog.SysLogId = CommonHelper.GetGuid(); SysLog.ObjectId = item; SysLog.LogType = CommonHelper.GetString((int)OperationType.Delete); SysLog.IPAddress = ManageProvider.Provider.Current().IPAddress; SysLog.IPAddressName = ManageProvider.Provider.Current().IPAddressName; SysLog.CompanyId = ManageProvider.Provider.Current().CompanyId; SysLog.DepartmentId = ManageProvider.Provider.Current().DepartmentId; SysLog.CreateUserId = ManageProvider.Provider.Current().UserId; SysLog.CreateUserName = ManageProvider.Provider.Current().UserName; SysLog.ModuleId = DESEncrypt.Decrypt(CookieHelper.GetCookie("ModuleId")); if (Remark == "") { SysLog.Remark = DatabaseCommon.GetClassName<T>(); } SysLog.Remark = Remark; SysLog.Status = State; database.Insert(SysLog, isOpenTrans); //添加日志详细信息 Type objTye = typeof(T); foreach (PropertyInfo pi in objTye.GetProperties()) { object value = pi.GetValue(Oldentity, null); if (value != null && value.ToString() != " " && value.ToString() != "") { Base_SysLogDetail syslogdetail = new Base_SysLogDetail(); syslogdetail.SysLogDetailId = CommonHelper.GetGuid(); //syslogdetail.SysLogId = SysLog.SysLogId; syslogdetail.PropertyField = pi.Name; syslogdetail.PropertyName = DatabaseCommon.GetFieldText(pi); syslogdetail.NewValue = "" + value + ""; database.Insert(syslogdetail, isOpenTrans); } } } database.Commit(); } catch { database.Rollback(); } } #endregion /// <summary> /// 清空操作日志 /// </summary> /// <param name="CreateDate"></param> /// <returns></returns> public int RemoveLog(string KeepTime) { StringBuilder strSql = new StringBuilder(); DateTime CreateDate = DateTime.Now; if (KeepTime == "7")//保留近一周 { CreateDate = DateTime.Now.AddDays(-7); } else if (KeepTime == "1")//保留近一个月 { CreateDate = DateTime.Now.AddMonths(-1); } else if (KeepTime == "3")//保留近三个月 { CreateDate = DateTime.Now.AddMonths(-3); } if (KeepTime == "0")//不保留,全部删除 { strSql.Append("DELETE FROM Base_SysLog"); return DataFactory.Database().ExecuteBySql(strSql); } else { strSql.Append("DELETE FROM Base_SysLog WHERE 1=1 "); strSql.Append("AND CreateDate <= @CreateDate"); List<DbParameter> parameter = new List<DbParameter>(); parameter.Add(DbFactory.CreateDbParameter("@CreateDate", CreateDate)); return DataFactory.Database().ExecuteBySql(strSql, parameter.ToArray()); } } /// <summary> /// 获取系统日志列表 /// </summary> /// <param name="ModuleId">模块ID</param> /// <param name="ParameterJson">搜索条件</param> /// <param name="jqgridparam">分页条件</param> /// <returns></returns> public List<Base_SysLog> GetPageList(string ModuleId, string ParameterJson, ref JqGridParam jqgridparam) { StringBuilder strSql = new StringBuilder(); List<DbParameter> parameter = new List<DbParameter>(); strSql.Append(@"SELECT * FROM ( SELECT l.SysLogId , l.ObjectId , l.LogType , l.IPAddress , l.IPAddressName , l.CreateDate , l.CreateUserId , l.CreateUserName , l.ModuleId AS Module, m.FullName AS ModuleId , l.Remark , l.State FROM Base_SysLog l LEFT JOIN Base_Module m ON m.ModuleId = l.ModuleId ) A WHERE 1 = 1"); //strSql.Append(WhereSql); if (!string.IsNullOrEmpty(ModuleId)) { strSql.Append(" AND Module = @ModuleId"); parameter.Add(DbFactory.CreateDbParameter("@ModuleId", ModuleId)); } return Repository().FindListPageBySql(strSql.ToString(), parameter.ToArray(), ref jqgridparam); } /// <summary> /// 获取系统日志明细列表 /// </summary> /// <param name="SysLogId">系统日志主键</param> /// <returns></returns> public List<Base_SysLogDetail> GetSysLogDetailList(string SysLogId) { string WhereSql = " AND SysLogId = @SysLogId Order By CreateDate ASC"; List<DbParameter> parameter = new List<DbParameter>(); parameter.Add(DbFactory.CreateDbParameter("@SysLogId", SysLogId)); return DataFactory.Database().FindList<Base_SysLogDetail>(WhereSql, parameter.ToArray()); } } /// <summary> /// 操作类型 /// </summary> public enum OperationType { /// <summary> /// 登陆 /// </summary> Login = 0, /// <summary> /// 新增 /// </summary> Add = 1, /// <summary> /// 修改 /// </summary> Update = 2, /// <summary> /// 删除 /// </summary> Delete = 3, /// <summary> /// 其他 /// </summary> Other = 4, /// <summary> /// 访问 /// </summary> Visit = 5, /// <summary> /// 离开 /// </summary> Leave = 6, /// <summary> /// 查询 /// </summary> Query = 7, /// <summary> /// 安全退出 /// </summary> Exit = 8, } }
(2)Base_DataDictionaryDetailBll
using Bobo.DataAccess; using Bobo.Repository; using Bobo.Utilities; using IA.Entity; using System; using System.Collections.Generic; using System.Data; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IA.Business.SystemBusiness { // <summary> /// 数据字典表 /// <author> /// <name>YHB</name> /// <date>2018.10.18</date> /// </author> /// </summary> public class Base_DataDictionaryDetailBll : RepositoryFactory<Base_DataDictionaryDetail> { /// <summary> /// 根据字典类型和编码获取字典详细 /// </summary> /// <param name="DataDictionaryType"></param> /// <param name="Code"></param> /// <returns></returns> public List<Base_DataDictionaryDetail> GetDataducListByTypeCode(string DataDictionaryType, string Code) { StringBuilder Sql = new StringBuilder(); List<DbParameter> param = new List<DbParameter>(); Sql.Append(@"SELECT * FROM Base_DataDictionaryDetail WHERE DeleteMark<>1"); if (!StringHelper.IsNullOrEmpty(DataDictionaryType)) { Sql.Append(@" AND DataDictionaryType=@DataDictionaryType"); param.Add(DbFactory.CreateDbParameter("@DataDictionaryType", DataDictionaryType)); } if (!StringHelper.IsNullOrEmpty(Code)) { Sql.Append(@" AND Code=@Code"); param.Add(DbFactory.CreateDbParameter("@Code", Code)); } return Factory.FindListBySql(Sql.ToString(), param.ToArray()); } /// <summary> /// 获取类型关键字 /// </summary> /// <param name="DataDictionaryTitle"></param> /// <param name="DataDictionaryType"></param> /// <returns></returns> public List<Base_DataDictionaryDetail> GetDataDictionaryList(string DataDictionaryTitle, string DataDictionaryType) { StringBuilder Sql = new StringBuilder(); List<DbParameter> param = new List<DbParameter>(); Sql.Append(@"SELECT * FROM Base_DataDictionaryDetail WHERE DeleteMark<>1"); if (!StringHelper.IsNullOrEmpty(DataDictionaryType)) { Sql.Append(@" AND DataDictionaryType=@DataDictionaryType"); param.Add(DbFactory.CreateDbParameter("@DataDictionaryType", DataDictionaryType)); } if (!StringHelper.IsNullOrEmpty(DataDictionaryTitle)) { Sql.Append(@" AND DataDictionaryTitle like @DataDictionaryTitle"); param.Add(DbFactory.CreateDbParameter("@DataDictionaryTitle", '%' + DataDictionaryTitle + '%')); } return Factory.FindListBySql(Sql.ToString(), param.ToArray()); } /// <summary> /// 获取关于协会分页数据 /// </summary> /// <param name="ArticleTitle"></param> /// <param name="jgp"></param> /// <returns></returns> public DataTable GetAboutTablePage(ref JqGridParam jgp) { StringBuilder Sql = new StringBuilder(); List<DbParameter> param = new List<DbParameter>(); Sql.Append(@"SELECT * FROM( SELECT X1.DataDictionaryTitle,X1.Code,X1.SortCode,X2.* from (SELECT * FROM dbo.Base_DataDictionaryDetail WHERE DeleteMark<>1 AND DataDictionaryType='About') X1 LEFT JOIN (SELECT * FROM Com_Article WHERE DeleteMark<>1 AND State=1) X2 ON X1.Code=x2.ArticleType) TT WHERE 1=1 "); return Factory.FindTablePageBySql(Sql.ToString(), param.ToArray(), ref jgp); } /// <summary> /// /// </summary> /// <param name="jgp"></param> /// <returns></returns> public DataTable GetAboutTableAllPage(ref JqGridParam jgp) { StringBuilder Sql = new StringBuilder(); List<DbParameter> param = new List<DbParameter>(); Sql.Append(@"SELECT * FROM( SELECT X1.DataDictionaryTitle,X1.Code,X1.SortCode,X2.* from (SELECT * FROM dbo.Base_DataDictionaryDetail WHERE DeleteMark<>1 AND DataDictionaryType='About') X1 LEFT JOIN (SELECT * FROM Com_Article WHERE DeleteMark<>1) X2 ON X1.Code=x2.ArticleType) TT WHERE 1=1 "); return Factory.FindTablePageBySql(Sql.ToString(), param.ToArray(), ref jgp); } /// <summary> /// 添加关键字 /// </summary> /// <param name="ContentKey"></param> /// <returns></returns> public int SubContentKey(string ContentKey) { List<DbParameter> param = new List<DbParameter>(); string[] ContentKeyArr = ContentKey.Split(','); int num = 0; try { if (ContentKeyArr.Length > 0) { foreach (var item in ContentKeyArr) { StringBuilder Sql = new StringBuilder(); Sql.Append(@"DELETE Base_DataDictionaryDetail WHERE DeleteMark<>1 AND DataDictionaryType='ContentKey' AND DataDictionaryTitle='" + item + "'"); Factory.ExecuteBySql(Sql); Base_DataDictionaryDetail entiy = new Base_DataDictionaryDetail(); entiy.DataDictionaryTitle = item; entiy.DataDictionaryType = "ContentKey"; entiy.Create(); Factory.Insert(entiy); } num = 1; } else { num = 0; } } catch { num= 0; } return num; } /// <summary> /// 获取有数据的关键字 /// </summary> /// <param name="Type">关键字类型</param> /// <returns></returns> public List<Base_DataDictionaryDetail> GetContentKeyList(string Type) { StringBuilder Sql = new StringBuilder(); List<DbParameter> param = new List<DbParameter>(); if (!StringHelper.IsNullOrEmpty(Type)) { Sql.Append(@"SELECT * FROM( SELECT (SELECT COUNT(FileID) FROM dbo.Com_Attachment WHERE DeleteMark<>1 AND ContentKey like '%'+x.DataDictionaryTitle+'%' AND FileType=@FileType) FileCount, x.DataDictionaryTitle, x.DataDictionaryType, '"+Type+@"' Code, x.DeleteMark FROM dbo.Base_DataDictionaryDetail x) T WHERE DataDictionaryType='ContentKey' AND DeleteMark<>1 AND FileCount>0"); param.Add(DbFactory.CreateDbParameter("@FileType", Type)); } return Factory.FindListBySql(Sql.ToString(), param.ToArray()); } } }
(3)Base_ProvinceCityBll
using Bobo.DataAccess; using Bobo.Repository; using Bobo.Utilities; using IA.Entity; using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IA.Business.SystemBusiness { // <summary> /// 省市区域表 /// <author> /// <name>YHB</name> /// <date>2018.10.18</date> /// </author> /// </summary> public class Base_ProvinceCityBll : RepositoryFactory<Base_ProvinceCity> { /// <summary> /// 获取区域列表 /// </summary> /// <param name="ParentId">附件ID</param> /// <param name="Category">区域类型(province,city)</param> /// <param name="Code">区划代码</param> /// <param name="FullName">区域名称</param> /// <returns></returns> public List<Base_ProvinceCity> GetProvinceCityList(string ParentId, string Category, string Code, string FullName) { StringBuilder whereSql = new StringBuilder(); List<DbParameter> param = new List<DbParameter>(); whereSql.Append(@" AND DeleteMark<>1"); if (!StringHelper.IsNullOrEmpty(ParentId)) { whereSql.Append(@" AND ParentId=@ParentId"); param.Add(DbFactory.CreateDbParameter("@ParentId", ParentId)); } if (!StringHelper.IsNullOrEmpty(Category)) { whereSql.Append(@" AND Category=@Category"); param.Add(DbFactory.CreateDbParameter("@Category", Category)); } if (!StringHelper.IsNullOrEmpty(Code)) { whereSql.Append(@" AND Code=@Code"); param.Add(DbFactory.CreateDbParameter("@Code", Code)); } if (!StringHelper.IsNullOrEmpty(FullName)) { whereSql.Append(@" AND FullName like '%" + FullName + "%'"); } whereSql.Append(@" ORDER BY SortCode DESC"); return Factory.FindList(whereSql.ToString(), param.ToArray()); } } }
(4)Base_UserBll
using Bobo.DataAccess.DebugLog; using Bobo.Repository; using Bobo.Utilities; using Bobo.Utilities.Membership; using IA.Entity; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IA.Business.SystemBusiness { /// <summary> /// 系统用户表 /// </summary> public class Base_UserBll : RepositoryFactory<Base_User> { /// <summary> /// 用户登录 /// </summary> /// <param name="Account"></param> /// <param name="Password"></param> /// <param name="IPAddressName"></param> /// <param name="IPAddress"></param> /// <returns></returns> public int UserLogin(string Account, string Password, string IPAddressName, string IPAddress) { if (!this.IsLinkServer()) { throw new Exception("服务器连接不上," + DbResultMsg.ReturnMsg); } else { Base_User entity = Factory.FindEntity("Account", Account); if (!StringHelper.IsNullOrEmpty(entity) && !StringHelper.IsNullOrEmpty(entity.UserId)) { if (entity.Password == Md5Helper.CreateMd5(DESEncrypt.Encrypt(Password, BaseFactory.BaseHelper().GetPwodKey()).ToLower(), 32).ToLower()) { IManageUser imanageuser = new IManageUser(); imanageuser.UserId = entity.UserId; imanageuser.Account = entity.Account; imanageuser.UserName = entity.RealName; imanageuser.Gender = Convert.ToString(entity.Sex); imanageuser.Code = "System"; imanageuser.LogTime = DateTime.Now; imanageuser.CompanyId = "系统"; imanageuser.DepartmentId = "系统"; imanageuser.IPAddress = IPAddress; imanageuser.IPAddressName = IPAddressName; imanageuser.IsSystem = true; imanageuser.Password = Md5Helper.CreateMd5(DESEncrypt.Encrypt(Password, BaseFactory.BaseHelper().GetPwodKey()).ToLower(), 32).ToLower(); ManageProvider.Provider.AddCurrent(imanageuser, false); return 1;//登录成功 } else { return 3;//密码错误 } } else { return 2;//账户不存在 } } } /// <summary> /// 判断是否连接服务器 /// </summary> /// <returns></returns> public bool IsLinkServer() { StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT GETDATE()"); DataTable dt = Repository().FindTableBySql(strSql.ToString()); if (dt != null && dt.Rows.Count > 0) { return true; } else { return false; } } } }