关于c#原生sql的封装
Posted 青兰柳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于c#原生sql的封装相关的知识,希望对你有一定的参考价值。
//1 将实体对象动态转换为原生sql语句(增,删,改,查),查暂时只有单表查询,多实体的动态生成暂时还没想出来
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.Extensions.Hosting; using MISSION.Entitys; using MISSION.Entitys.Enums; using MySqlConnector; using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Data; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace MISSION.Util public class SqlBuilderHelper /// <summary> /// Insert SQL语句 /// </summary> /// <param name="obj">要转换的对象,不可空</param> /// <returns> /// 空 /// sql语句 /// </returns> public static string InsertSql<T>(T t, bool dynamic = false) where T : class var tableName = GetTableName<T>(dynamic); if (t == null || string.IsNullOrEmpty(tableName)) return string.Empty; string columns = GetColmons(t); if (string.IsNullOrEmpty(columns)) return string.Empty; string values = GetValues(t); if (string.IsNullOrEmpty(values)) return string.Empty; StringBuilder sql = new StringBuilder(); sql.Append("insert into " + tableName); sql.Append("(" + columns + ")"); sql.Append(" values(" + values + ")"); return sql.ToString(); /// <summary> /// BulkInsert SQL语句(批量添加) /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="objs">要转换的对象集合,不可空</param> /// <returns> /// 空 /// sql语句 /// </returns> public static string BulkInsertSql<T>(List<T> objs, bool dynamic = false) where T : class var tableName = GetTableName<T>(dynamic); if (objs == null || objs.Count == 0 || string.IsNullOrEmpty(tableName)) return string.Empty; string columns = GetColmons(objs[0]); if (string.IsNullOrEmpty(columns)) return string.Empty; string values = string.Join(",", objs.Select(p => string.Format("(0)", GetValues(p) == null ? null : GetValues(p))).ToArray()); StringBuilder sql = new StringBuilder(); sql.Append("insert into " + tableName); sql.Append("(" + columns + ")"); sql.Append(" values " + values + ""); return sql.ToString(); /// <summary> /// 获得类型的列名 /// </summary> /// <param name="obj"></param> /// <returns></returns> private static string GetColmons<T>(T obj) if (obj == null) return string.Empty; return string.Join(",", obj.GetType().GetProperties().Where(p => !p.PropertyType.FullName.Contains("System.Collections") || (p.PropertyType.BaseType != null && p.PropertyType.BaseType.FullName.Contains("System.Array"))). Select(p => p.Name.ToLower()).ToList()); /// <summary> /// 获得值 /// </summary> /// <param name="obj"></param> /// <returns></returns> private static string GetValues<T>(T obj) if (obj == null) return string.Empty; PropertyInfo[] propertys = obj.GetType().GetProperties(); StringBuilder sb = new StringBuilder(); var a = typeof(string).FullName; var b = typeof(Guid).FullName; foreach (var property in propertys) if (property.PropertyType.FullName.Contains("System.Collections") || (property.PropertyType.BaseType != null && property.PropertyType.BaseType.FullName.Contains("System.Array"))) continue; if (property.GetValue(obj) == null) sb.Append("null"); else if (property.PropertyType.FullName.Contains("System.DateTime")) sb.AppendFormat(" \'0\'", Convert.ToDateTime(property.GetValue(obj)).ToString("yyyy-MM-dd HH:mm:ss")); else if (property.PropertyType.FullName.Contains("System.String") || property.PropertyType.FullName.Contains("System.Guid")) sb.AppendFormat(" \'0\'", property.GetValue(obj)); else if (property.PropertyType.BaseType.FullName.Contains("System.Enum")) sb.AppendFormat(" 0 ", (int)property.GetValue(obj)); else sb.AppendFormat(" 0 ", property.GetValue(obj)); sb.Append(","); var insert = sb.ToString(); return insert.Remove(insert.LastIndexOf(","), 1); /// <summary> /// sql修改语句 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static string UpdateSql<T>(T entity, bool dynamic = false) where T : class var tableName = GetTableName<T>(dynamic); if (entity == null || string.IsNullOrEmpty(tableName)) return string.Empty; string pkName = GetPK<T>(); if (string.IsNullOrEmpty(pkName)) return string.Empty; string pkValue = string.Empty; StringBuilder sb = new StringBuilder(); sb.Append("update "); sb.Append(tableName); sb.Append(" set "); Type type = entity.GetType(); PropertyInfo[] props = type.GetProperties(); List<string> paraList = new List<string>(); foreach (var prop in props) if (prop.Name == (string)pkName) pkValue = (string)prop.GetValue(entity).ToString(); else if (!string.IsNullOrEmpty(GetUpdatePara(prop, entity))) paraList.Add(GetUpdatePara(prop, entity)); if (paraList.Count == 0) return string.Empty; sb.Append(string.Join(",", paraList)); if (string.IsNullOrEmpty(pkValue)) throw new Exception("主键不能为空"); sb.Append(" where "); sb.Append(pkName.ToLower()); sb.Append(" = "); sb.AppendFormat("\'0\'", pkValue); return sb.ToString(); /// <summary> /// sql修改语句 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static string UpdateSqlByWhere<T>(T entity, string where, bool dynamic = false) where T : class var tableName = GetTableName<T>(dynamic); if (entity == null || string.IsNullOrEmpty(tableName)) return string.Empty; //string pkName = GetPK<T>(); //if (string.IsNullOrEmpty(pkName)) // // return string.Empty; // //string pkValue = string.Empty; StringBuilder sb = new StringBuilder(); sb.Append("update "); sb.Append(tableName); sb.Append(" set "); Type type = entity.GetType(); PropertyInfo[] props = type.GetProperties(); List<string> paraList = new List<string>(); foreach (var prop in props) //if (prop.Name == (string)pkName) // // pkValue = (string)prop.GetValue(entity).ToString(); // //else // if (!string.IsNullOrEmpty(GetUpdatePara(prop, entity))) paraList.Add(GetUpdatePara(prop, entity)); // if (paraList.Count == 0) return string.Empty; sb.Append(string.Join(",", paraList)); //if (string.IsNullOrEmpty(pkValue)) // // throw new Exception("主键不能为空"); // sb.Append(" where "); sb.Append(where); return sb.ToString(); /// <summary> /// 基类更新,一个从表(从表的外建是主表+主键) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static string UpdateSql<T, T1>(T entity, List<T1> t1s, bool dynamic = false) where T : class where T1 : class var tableName = GetTableName<T>(dynamic); var key = GetPK<T>(); PropertyInfo pkProp = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault(); var keyValue = pkProp.GetValue(entity).ToString(); var strSql = UpdateSql(entity); tableName = tableName.Remove(0, 1); ///从表的外建是主表名(去掉第一个字符)+表主键 var fOREIGNKEY = tableName + key; var where = fOREIGNKEY + "=\'" + keyValue + "\'"; strSql = strSql + ";" + DeleteByWhere<T1>(where); strSql = strSql + BulkInsertSql(t1s); return strSql; /// <summary> /// 基类更新,其他表添加相应的数据(与主表没有关联,比如做一个记录表) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static string UpdateAndAddSql<T, T1>(T entity, List<T1> t1s, bool dynamic = false) where T : class where T1 : class var tableName = GetTableName<T>(dynamic); var key = GetPK<T>(); PropertyInfo pkProp = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault(); var keyValue = pkProp.GetValue(entity).ToString(); var strSql = UpdateSql(entity); tableName = tableName.Remove(0, 1); strSql = strSql + ";" + BulkInsertSql(t1s); return strSql; /// <summary> /// 基类更新,两个从表(从表的外建是主表+主键) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static string UpdateSql<T, T1, T2>(T entity, List<T1> t1, List<T2> t2, bool dynamic = false) where T : class where T1 : class where T2 : class var tableName = GetTableName<T>(dynamic); var key = GetPK<T>(); PropertyInfo pkProp = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault(); var keyValue = pkProp.GetValue(entity).ToString(); var strSql = UpdateSql(entity); tableName = tableName.Remove(0, 1); ///从表的外建是主表名(去掉第一个字符)+表主键 var fOREIGNKEY = tableName + key; var where = fOREIGNKEY + "=\'" + keyValue + "\'"; strSql = strSql + ";" + DeleteByWhere<T1>(where); strSql = strSql + DeleteByWhere<T2>(where); strSql = strSql + BulkInsertSql(t1); strSql = strSql + ";" + BulkInsertSql(t2); return strSql; /// <summary> /// 基类更新,三个从表(从表的外建是主表+主键) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="entity"></param> /// <returns></returns> public static string UpdateSql<T, T1, T2, T3>(T entity, List<T1> t1, List<T2> t2, List<T3> t3, bool dynamic = false) where T : class where T1 : class where T2 : class where T3 : class var tableName = GetTableName<T>(dynamic); var key = GetPK<T>(); PropertyInfo pkProp = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault(); var keyValue = pkProp.GetValue(entity).ToString(); var strSql = UpdateSql(entity); tableName = tableName.Remove(0, 1); ///从表的外建是主表名(去掉第一个字符)+表主键 var fOREIGNKEY = tableName + key; var where = fOREIGNKEY + "=\'" + keyValue + "\'"; strSql = strSql + ";" + DeleteByWhere<T1>(where); strSql = strSql + DeleteByWhere<T2>(where); strSql = strSql + DeleteByWhere<T3>(where); strSql = strSql + BulkInsertSql(t1); strSql = strSql + ";" + BulkInsertSql(t2); strSql = strSql + ";" + BulkInsertSql(t3); return strSql; /// <summary> /// 获得修改参数 /// </summary> /// <param name="property"></param> /// <returns></returns> private static string GetUpdatePara<T>(PropertyInfo property, T entity) StringBuilder sb = new StringBuilder(); if (property.Name.ToLower() != "createtime") if (property.PropertyType.FullName.Contains("System.Collections") || (property.PropertyType.BaseType != null && property.PropertyType.BaseType.FullName.Contains("System.Array"))) return ""; if (property.GetValue(entity) == null) sb.AppendFormat(" 0= null ", property.Name.ToLower()); else if (property.PropertyType.FullName.Contains("System.DateTime")) sb.AppendFormat(" 0=\'1\' ", property.Name.ToLower(), Convert.ToDateTime(property.GetValue(entity)).ToString("yyyy-MM-dd HH:mm:ss")); else if (property.PropertyType.FullName.Contains("System.String") || property.PropertyType.FullName.Contains("System.Guid")) sb.AppendFormat(" 0=\'1\' ", property.Name.ToLower(), property.GetValue(entity)); else if (property.PropertyType.BaseType.FullName.Contains("System.Enum")) sb.AppendFormat(" 0=1 ", property.Name.ToLower(), (int)property.GetValue(entity)); else sb.AppendFormat(" 0=1 ", property.Name.ToLower(), property.GetValue(entity)); return sb.ToString(); /// <summary> /// 获得主键名称 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> private static string GetPK<T>() where T : class //获取主键的 PropertyInfo PropertyInfo pkProp = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).FirstOrDefault(); //主键名称 var keyName = pkProp.Name; return keyName; /// <summary> /// 获取表名 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> private static string GetTableName<T>(bool dynamic = false) where T : class var tableName = (typeof(T).GetCustomAttributes(typeof(TableAttribute), false)[0] as TableAttribute).Name; //pemployeeschedulingdata员工排班数据每个月生成一个新表 if (tableName.Contains("pemployeeschedulingdata")) // if (tableName.Contains("auto") || dynamic) if (DateTime.Now.Month == 12) tableName = "pemployeeschedulingdata_" + (DateTime.Now.Year + 1).ToString() + "_1"; else tableName = "pemployeeschedulingdata_" + DateTime.Now.Year.ToString() + "_" + (DateTime.Now.Month + 1).ToString(); else tableName = "pemployeeschedulingdata_" + DateTime.Now.Year.ToString() + "_" + (DateTime.Now.Month).ToString(); return tableName.ToLower(); /// <summary> /// 通过主键删除 /// </summary> /// <param name="ids"></param> /// <returns></returns> public static string DeleteByIds<T>(List<string> ids, bool dynamic = false) where T : class var tableName = GetTableName<T>(dynamic); var id = ArrayToString(ids); string pkName = GetPK<T>(); string sqlText = string.Format(@"delete from 0 where 1 in ( 2 ); ", tableName, pkName.ToLower(), id); return sqlText; /// <summary> /// 根据sql条件删除 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="where"></param> /// <returns></returns> public static string DeleteByWhere<T>(string where, bool dynamic = false) where T : class var tableName = GetTableName<T>(dynamic); string sqlText = string.Format(@"delete from 0 where 1; ", tableName, where); return sqlText; /// <summary> /// 根据sql条件删除(T为主表,T1为从表) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="where"></param> /// <returns></returns> public static string DeleteByWhere<T, T1>(List<string> deleteByIds, bool dynamic = false) where T : class where T1 : class var strsql = DeleteByIds<T>(deleteByIds); var ids = string.Join(\',\', deleteByIds.ToArray()); var tableName = GetTableName<T>(dynamic); var key = GetPK<T>(); tableName = tableName.Remove(0, 1); var fOREIGNKEY = tableName + key; var where = fOREIGNKEY + " in (" + ids + ")"; strsql = strsql + DeleteByWhere<T1>(where); return strsql; /// <summary> /// 根据sql条件删除(T为主表,T1为从表) /// </summary> /// <typeparam name="T"></typeparam> /// <param name="where"></param> /// <returns></returns> public static string DeleteByWhere<T, T1, T2>(List<string> deleteByIds, bool dynamic = false) where T : class where T1 : class where T2 : class var strsql = DeleteByIds<T>(deleteByIds); var ids = string.Join(\',\', deleteByIds.ToArray()); var tableName = GetTableName<T>(dynamic); var key = GetPK<T>(); tableName = tableName.Remove(0, 1); var fOREIGNKEY = tableName + key.ToLower(); var where = fOREIGNKEY + " in (" + ids + ")"; strsql = strsql + DeleteByWhere<T1>(where); strsql = strsql + DeleteByWhere<T2>(where); return strsql; /// <summary> /// 单表查询 /// </summary> /// <param name="type"></param> /// <param name="where"></param> /// <param name="dbType"></param> /// <returns></returns> public static string SelectToSql<T>(string where, bool dynamic = false) where T : class if (!string.IsNullOrEmpty(where)) if (!where.TrimStart().StartsWith("WHERE", StringComparison.CurrentCultureIgnoreCase)) where = "Where " + where; StringBuilder sql = new StringBuilder("SELECT ");//不考虑多表操作 //添加的sql语句 Type type = typeof(T); PropertyInfo[] infos = type.GetProperties(); foreach (PropertyInfo pro in infos) if (pro.PropertyType.FullName.Contains("System.Collections") || (pro.PropertyType.BaseType != null && pro.PropertyType.BaseType.FullName.Contains("System.Array"))) continue; else sql.Append(pro.Name + \',\'); //if (ExcludeFieldAttribute.GetAttribute(pro) != null) continue;//自定义扩展属性不处理 sql = sql.Remove(sql.Length - 1, 1); string tableName = GetTableName<T>(dynamic); //sql.AppendLine(); sql.AppendFormat(" FROM 0 ", tableName); sql.Append(where); string result = Recombine(sql.ToString().ToLower()); return result; /// <summary> /// 单表查询(查询条件也是此表中的) /// </summary> /// <param name="type"></param> /// <param name="where"></param> /// <param name="dbType"></param> /// <returns></returns> public static string SelectToSql<T>(object param, bool dynamic = false) where T : class StringBuilder sql = new StringBuilder("SELECT ");//不考虑多表操作 //添加的sql语句 Type type = typeof(T); PropertyInfo[] infos = type.GetProperties(); foreach (PropertyInfo pro in infos) //if (ExcludeFieldAttribute.GetAttribute(pro) != null) continue;//自定义扩展属性不处理 sql.Append(pro.Name + \',\'); sql = sql.Remove(sql.Length - 1, 1); string tableName = GetTableName<T>(dynamic); sql.AppendFormat(" FROM 0 where 1=1 ", tableName); foreach (PropertyInfo p in param.GetType().GetProperties()) if (p.GetValue(param) != null && !string.IsNullOrEmpty(p.GetValue(param).ToString())) var exit = infos.Where(c => c.Name.Contains(p.Name)).FirstOrDefault(); if (exit != null) if (p.PropertyType.Name == typeof(Guid).Name) sql.Append($"and p.Name = \'%p.GetValue(param)%\' "); // string默认使用模糊查询 else if (p.PropertyType.Name == typeof(string).Name) sql.Append($"and p.Name like \'%p.GetValue(param)%\' "); else sql.Append($"and p.Name= p.GetValue(param) "); string result = Recombine(sql.ToString().ToLower()); return result; private static string _paramPrefix = @"@"; public static DbTypeEnums _dbType get; set; /// <summary> /// 替换特殊函数 /// </summary> /// <param name="sql"></param> /// <returns></returns> private static string Recombine(string sql) _dbType = DbTypeEnums.mysql; switch (_dbType) case DbTypeEnums.SqlServer: break; case DbTypeEnums.Oracle: sql = sql.Replace("@", _paramPrefix); sql = sql.Replace("isnull(", "NVL(") .Replace("ISNULL(", "NVL(") .Replace("getDate()", "SYSDATE") .Replace("getdate()", "SYSDATE") .Replace("GETDATE()", "SYSDATE"); break; case DbTypeEnums.mysql: sql = sql.Replace("isnull(", "ifnull(") .Replace("ISNULL(", "ifnull(") .Replace("getDate()", "now()") .Replace("getdate()", "now()") .Replace("GETDATE()", "now()"); break; return sql; /// <summary> /// 根据实体生成建表的sql,不支持创建子表 /// </summary> /// <typeparam name="T"></typeparam> /// <returns></returns> public static string CreateTableScript<T>(bool dynamic = false) where T : class StringBuilder script = new StringBuilder(); var tableName = GetTableName<T>(dynamic); script.Append($"CREATE TABLE IF NOT EXISTS tableName ("); var key = GetPK<T>(); ///表描述 var tableDescription = (typeof(T).GetCustomAttributes(typeof(DescriptionAttribute), false)).FirstOrDefault() as DescriptionAttribute; //var tableDescription = (typeof(T).GetCustomAttributes(typeof(DescriptionAttribute), false)[0] as DescriptionAttribute); //主键 var keys = new List<string>(); var pkProp = typeof(T).GetProperties().Where(p => p.GetCustomAttributes(typeof(KeyAttribute), false).Length > 0).ToList(); if (pkProp != null) if (pkProp.Count == 1) foreach (var item in pkProp) var descriptionAttribute = ((DescriptionAttribute)Attribute.GetCustomAttribute(item, typeof(DescriptionAttribute)));// 属性值 var keyTypeName = item.PropertyType.FullName; if (keyTypeName == "System.Guid") script.Append($"item.Name.ToLower() char(36) not null primary key,\\r\\n"); else if (keyTypeName == "System.String") var maxLength = 64; var maxLengthAttribute = item.GetCustomAttributes(typeof(MaxLengthAttribute), false).FirstOrDefault(); if (maxLengthAttribute != null) maxLength = ((MaxLengthAttribute)maxLengthAttribute).Length; script.Append($"item.Name.ToLower() nvarchar(maxLength) not null primary key,\\r\\n"); else if (keyTypeName == "System.DateTime") script.Append($"item.Name.ToLower() datetime not null primary key,\\r\\n"); else script.Append($"item.Name.ToLower() int primary key auto_increment ,\\r\\n"); if (descriptionAttribute != null) var descript = descriptionAttribute.Description; if (!string.IsNullOrEmpty(descript)) var lastIndex = script.ToString().LastIndexOf(","); var length = script.Length - lastIndex; script = script.Remove(lastIndex, length); script = script.Append(" comment \'" + descript + "\',\\r\\n"); keys.Add(item.Name); else foreach (var item in pkProp) //字段描述 var descriptionAttribute = ((DescriptionAttribute)Attribute.GetCustomAttribute(item, typeof(DescriptionAttribute)));// 属性值 var keyTypeName = item.PropertyType.FullName; if (keyTypeName == "System.Guid") script.Append($"item.Name.ToLower() char(36) not null ,\\r\\n"); else if (keyTypeName == "System.String") var maxLength = 64; var maxLengthAttribute = item.GetCustomAttributes(typeof(MaxLengthAttribute), false).FirstOrDefault(); if (maxLengthAttribute != null) maxLength = ((MaxLengthAttribute)maxLengthAttribute).Length; script.Append($"item.Name.ToLower() nvarchar(maxLength) not null,\\r\\n"); else if (keyTypeName == "System.DateTime") script.Append($"item.Name.ToLower() datetime not null,\\r\\n"); else script.Append($"item.Name.ToLower() int not null auto_increment ,\\r\\n"); keys.Add(item.Name); if (descriptionAttribute != null) var descript = descriptionAttribute.Description; if (!string.IsNullOrEmpty(descript)) var lastIndex = script.ToString().LastIndexOf(","); var length = script.Length - lastIndex; script = script.Remove(lastIndex, length); script = script.Append(" comment \'" + descript + "\',\\r\\n"); var keytostring = string.Join(\',\', keys.ToArray()).ToLower(); script.Append($"constraint pk_tableName primary key( keytostring ),\\r\\n"); Type t = typeof(T); PropertyInfo[] infos = t.GetProperties(); foreach (PropertyInfo pro in infos) var descriptionAttribute = ((DescriptionAttribute)Attribute.GetCustomAttribute(pro, typeof(DescriptionAttribute)));// 属性值 if (keys.Contains(pro.Name) || pro.PropertyType.FullName.Contains("System.Collections") || (pro.PropertyType.BaseType != null && pro.PropertyType.BaseType.FullName.Contains("System.Array"))) continue; else if (pro.PropertyType.FullName.Contains("Guid")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() char(36) null default \'\',\\r\\n"); else script.Append($"pro.Name.ToLower() char(36) not null default \'\',\\r\\n"); else if (pro.PropertyType.Name.Contains("String")) //允许为为空 var allowStringNull = pro.GetCustomAttributes(typeof(AllowStringNullAttribute), false); var maxLength = 64; var maxLengthAttribute = pro.GetCustomAttributes(typeof(MaxLengthAttribute), false).FirstOrDefault(); if (maxLengthAttribute != null) maxLength = ((MaxLengthAttribute)maxLengthAttribute).Length; if (allowStringNull.Count() != 0) script.Append($"pro.Name.ToLower() nvarchar(maxLength) null,\\r\\n"); else script.Append($"pro.Name.ToLower() nvarchar(maxLength) not null default \'\',\\r\\n"); else if (pro.PropertyType.FullName.Contains("System.Int16")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() smallint null,\\r\\n "); else script.Append($"pro.Name.ToLower() smallint not null default 0,\\r\\n "); else if (pro.PropertyType.FullName.Contains("Int32") || pro.PropertyType.BaseType.FullName.Contains("System.Enum")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() int null,\\r\\n "); else script.Append($"pro.Name.ToLower() int not null default 0,\\r\\n "); else if (pro.PropertyType.FullName.Contains("System.Int64")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() bigint null,\\r\\n "); else script.Append($"pro.Name.ToLower() bigint not null default 0,\\r\\n "); else if (pro.PropertyType.FullName.Contains("System.Double")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() double null,\\r\\n "); else script.Append($"pro.Name.ToLower() double not null default 0,\\r\\n"); else if (pro.PropertyType.FullName.Contains("System.Decimal")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() decimal null,\\r\\n "); else script.Append($"pro.Name.ToLower() decimal(8,2) not null default 0 , \\r\\n"); else if (pro.PropertyType.FullName.Contains("System.Single")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() float null,\\r\\n "); else script.Append($"pro.Name.ToLower() float not null default 0,\\r\\n"); else if (pro.PropertyType.FullName.Contains("System.Boolean")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() bool null,\\r\\n "); else script.Append($"pro.Name.ToLower() bool not null default \'0\',\\r\\n"); else if (pro.PropertyType.FullName.Contains("System.DateTime")) if (pro.PropertyType.Name.Contains("Nullable")) script.Append($"pro.Name.ToLower() datetime null,\\r\\n "); else script.Append($"pro.Name.ToLower() datetime not null default \'System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")\',\\r\\n"); else script.Append($"pro.Name.ToLower() int not null default 0,\\r\\n");Hibernate-原生sql
一.案例列举:
1.查询客户表,返回的每行数据用object数组装载,不会自动封装成对象
2.查询客户表,返回的数据封装成对象
3.条件查询
4.分页查询
以上是关于关于c#原生sql的封装的主要内容,如果未能解决你的问题,请参考以下文章
hibernate原生sql封装,报错信息:could not find setter for rownum_