public void GenerateSqlSelectDetailTest() { string resultMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.TableName = "TUSERCOMP"; criteria.SqlParameterPrefix = "v_"; var res = dal.GenerateSqlForSelectDetail(out resultMsg, criteria); var res1 = string.Empty; Assert.AreNotEqual(res, res1); }
public void GenerateSqlForSelectDetailTest() { string errorMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.DataBaseName = "Invoice_System"; criteria.TableName = "st_user_detail"; IList<ModelGeneration> res1 = null; var res = dal.GenerateSqlForSelectDetail(out errorMsg, criteria); Assert.AreNotEqual(res, res1); }
public void ModelCodeGenerationTest() { string resultMsg = string.Empty; var gen = new CodeGenerators(); //var code = gen.ModelCodeGeneration(out resultMsg, "Models", "SHIP_INFO", BaseDict.OracleData); var criteria = new GeneratorCriteria(); criteria.ModelsNamespace = "Models"; criteria.ModelClassNamePrefix = "Model"; criteria.DalNamespace = "Logic"; criteria.DalClassNamePrefix = "Logic"; criteria.TableName = "TUSER"; criteria.DataBaseType = BaseDict.OracleData; var code = gen.ModelCodeGeneration(out resultMsg, criteria.TableName, criteria.DataBaseType, criteria.DataBaseName, criteria.ModelsNamespace, criteria.ModelClassNamePrefix); var code1 = string.Empty; Assert.AreNotEqual(code, code1); }
/// <summary> /// SQL Select All 语句生成 /// </summary> public string GenerateSqlForSelectAll(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strWhereSql = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} SELECT ALL", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE PROCEDURE usp_{0}_select_all", criteria.TableName.ToLower()); sbSql.AppendLine(); sbSql.AppendLine(strParameter); sbSql.AppendLine("AS"); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat(" SELECT * FROM {0} ", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("END "); string sql = sbSql.ToString(); return sql; }
public void QueryTablesAllTest() { string errorMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.DataBaseName = "CardMaintain"; IList<ModelGeneration> res1 = null; var res = dal.QueryTablesAll(out errorMsg, criteria); Assert.AreNotEqual(res, res1); var PublicTableName = string.Empty; var publicTName = res[0].TableName; Assert.AreNotEqual(PublicTableName, publicTName); }
/// <summary> /// TSQL 语句生成 /// </summary> /// <param name="ResultMsg">执行结果信息</param> /// <param name="TableName">表名</param> /// <param name="DataBaseType">数据库类型</param> /// <param name="DataBaseName">数据库名</param> /// <param name="SqlParameterPrefix">TSql参数名前缀</param> /// <param name="SqlProcedurePrefix">TSql存储过程名称前缀</param> /// <param name="IsSqlInsertUpdate">是否生成 Insert/Update</param> /// <param name="IsSqlSelectDetail">是否生成 SelectDetail</param> /// <param name="IsSqlUpdateStatus">是否生成 UpdateStatus</param> /// <param name="IsSqlSelectPager">是否生成 SelectPager</param> /// <param name="IsSqlSelectAll">是否生成 SqlSelectAll</param> public string TSqlCodeGeneration(out string ResultMsg, string TableName, string DataBaseType = BaseDict.SqlServerData, string DataBaseName = null, string SqlParameterPrefix = null, string SqlProcedurePrefix = null, string IsSqlInsertUpdate = "True", string IsSqlSelectDetail = "True", string IsSqlUpdateStatus = "True", string IsSqlSelectPager = "True", string IsSqlSelectAll = "True", string IsSqlDelete = "True") { ResultMsg = string.Empty; var criteria = new GeneratorCriteria(); // 条件对象 criteria.DataBaseName = DataBaseName; // 数据库名称 criteria.TableName = TableName; // 表名 criteria.SqlParameterPrefix = SqlParameterPrefix; // SQL参数前缀 criteria.DataBaseType = DataBaseType; // 数据库类型 criteria.SqlProcedurePrefix = SqlProcedurePrefix; // 存储过程名称前缀 IGeneration dal = CreateInstance(criteria.DataBaseType); var code = string.Empty; if (IsSqlUpdateStatus.Equals("True")) code += dal.GenerateSqlForUpdateStatus(out ResultMsg, criteria); if (IsSqlInsertUpdate.Equals("True")) code += Environment.NewLine + dal.GenerateSqlForInsertUpdate(out ResultMsg, criteria); if (IsSqlSelectDetail.Equals("True")) code += Environment.NewLine + dal.GenerateSqlForSelectDetail(out ResultMsg, criteria); if (IsSqlSelectPager.Equals("True")) code += Environment.NewLine + dal.GenerateSqlForSelectPager(out ResultMsg, criteria); if (IsSqlSelectAll.Equals("True")) code += Environment.NewLine + dal.GenerateSqlForSelectAll(out ResultMsg, criteria); if (IsSqlDelete.Equals("True")) code += Environment.NewLine + dal.GenerateSqlForDelete(out ResultMsg, criteria); return code; }
public void QueryColumnsByTableTest() { string resultMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.TableName = "SHIP_INFO"; IList<ModelGeneration> res1 = null; var res = dal.QueryColumnsByTable(out resultMsg, criteria); Assert.AreNotEqual(res, res1); var PublicColName = string.Empty; var publicCName = res[0].PublicVarName; var pk = res[0].IsPrimaryKey; Assert.AreNotEqual(PublicColName, publicCName); }
/// <summary> /// 查询所有表名集合 /// </summary> public IList<ModelGeneration> QueryTablesAll(out string resultMsg, GeneratorCriteria criteria) { IList<ModelGeneration> list = new List<ModelGeneration>(); resultMsg = string.Empty; try { StringBuilder SQL = new StringBuilder(); #region SQL拼接 SQL.AppendFormat("USE {0} ", string.IsNullOrWhiteSpace(criteria.DataBaseName) ? "master" : criteria.DataBaseName); SQL.Append("SELECT C.NAME , "); SQL.Append(" C.TYPE , "); SQL.Append(" CAST(ISNULL(F.[VALUE], '') AS NVARCHAR(100)) AS REMARK "); SQL.Append("FROM SYS.OBJECTS C "); SQL.Append("LEFT JOIN SYS.EXTENDED_PROPERTIES F "); SQL.Append("ON F.MAJOR_ID = C.OBJECT_ID "); SQL.Append("AND F.MINOR_ID = 0 "); SQL.Append("AND F.CLASS = 1 "); SQL.Append("WHERE C.TYPE = 'u' "); SQL.Append("OR C.TYPE = 'v' "); SQL.Append("ORDER BY C.TYPE ,C.NAME"); #endregion //存储过程名称 string strSql = SQL.ToString(); //查询执行 using (IDataReader dr = DBHelper.ExecuteReader(strSql, false)) { list = GetTableModel(dr); } } catch (Exception EX) { resultMsg = string.Format("{0} {1}", BaseDict.ErrorPrefix, EX.Message); } return list; }
/// <summary> /// SQL UpdateStatus 语句生成 /// </summary> public string GenerateSqlForUpdateStatus(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; // 查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); // 查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); // 类名 私有 string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); // 类名 公有 string strParameter = string.Empty; string strWhereSql = string.Empty; string strCols = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} UPDATE STATUS", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE PROCEDURE usp_{0}_update_status ", criteria.TableName.ToLower()); sbSql.AppendLine(); foreach (var item in colList) { if (item.IsPrimaryKey || item.ColumnName.ToUpper().Contains("STATUS") || item.ColumnName.ToUpper().Contains("DELETE")) { var strSqlTypeAndLength = GetSqlTypeAndLength(item); sbSql.AppendFormat(" @{0}{1} {2}, ", criteria.SqlParameterPrefix, item.PublicVarName, strSqlTypeAndLength); sbSql.AppendLine(); } } sbSql.AppendLine(" @resultMsg NVARCHAR(500) OUT"); sbSql.AppendLine("AS"); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat("IF EXISTS(SELECT * FROM {0} WHERE ", criteria.TableName); foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strWhereSql)) strWhereSql += string.Format("[{0}] = @{1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); else strWhereSql += string.Format(" AND [{0}] = @{1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.Append(strWhereSql); sbSql.Append(")"); sbSql.AppendLine(); sbSql.AppendLine(" BEGIN"); sbSql.AppendFormat(" UPDATE {0} ", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine(" SET"); strParameter = string.Empty; foreach (var item in colList) { if (item.ColumnName.ToUpper().Contains("STATUS") || item.ColumnName.ToUpper().Contains("DELETE")) { if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format(" [{0}] = CASE WHEN @{1}{2} IS NOT NULL THEN @{1}{3} ELSE [{4}] END ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName, item.PublicVarName, item.ColumnName); else strParameter += string.Format(",{0} [{1}] = CASE WHEN @{2}{3} IS NOT NULL THEN @{2}{4} ELSE [{5}] END ", Environment.NewLine, item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName,item.PublicVarName, item.ColumnName); } } sbSql.AppendLine(strParameter); sbSql.AppendFormat(" WHERE {0} ", strWhereSql); sbSql.AppendLine(); sbSql.AppendFormat(" SET @resultMsg = '{0}{1}' ", BaseDict.SuccessPrefix, BaseDict.Success); sbSql.AppendLine(); sbSql.AppendLine(" END "); sbSql.AppendLine(" ELSE "); sbSql.AppendLine(" BEGIN "); sbSql.AppendFormat(" SET @resultMsg = '{0}{1}' ", BaseDict.ErrorPrefix, BaseDict.SqlExMsgNoData); sbSql.AppendLine(); sbSql.AppendLine(" END"); sbSql.AppendLine("END"); string sql = sbSql.ToString(); return sql; }
/// <summary> /// SQL Select Pager 语句生成 /// </summary> public string GenerateSqlForSelectPager(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strParmPagerIndex = string.Format(" {0}PagerIndex", criteria.SqlParameterPrefix); string strParmPagerSize = string.Format(" {0}PagerSize", criteria.SqlParameterPrefix); string strParmRowCount = string.Format(" {0}RowCount", criteria.SqlParameterPrefix); string strParmTotalPages = string.Format(" {0}TotalPages", criteria.SqlParameterPrefix); string strParmStartRow = string.Format(" {0}StartRow", criteria.SqlParameterPrefix); string strParmEndRow = string.Format(" {0}EndRow", criteria.SqlParameterPrefix); StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} SELECT PAGER", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE OR REPLACE PROCEDURE USP_{0}_SELECT_PAGER",criteria.TableName); sbSql.Append("("); sbSql.AppendLine(); sbSql.AppendFormat(" {0} IN NUMBER,", strParmPagerIndex); sbSql.AppendLine(); sbSql.AppendFormat(" {0} IN NUMBER,", strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" {0} OUT NUMBER,", strParmRowCount); sbSql.AppendLine(); sbSql.Append(" CUR_OUT OUT SYS_REFCURSOR"); sbSql.AppendLine(")"); sbSql.AppendLine("IS"); sbSql.AppendFormat(" {0} NUMBER :=0;", strParmTotalPages); sbSql.AppendLine(); sbSql.AppendFormat(" {0} NUMBER := 0;", strParmStartRow); sbSql.AppendLine(); sbSql.AppendFormat(" {0} NUMBER :=0;", strParmEndRow); sbSql.AppendLine(); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat(" SELECT COUNT(*) INTO {0} FROM {1} ; ", strParmRowCount,criteria.TableName); sbSql.AppendLine(); sbSql.AppendFormat(" {0} := CEIL({1} / {2}); ", strParmTotalPages, strParmRowCount, strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" {0} := ({1} - 1 ) * {2} + 1; ", strParmStartRow, strParmPagerIndex, strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" {0} := CASE WHEN {1} > {2}*{3} THEN ({4} * {5}) ELSE {6} END ;", strParmEndRow, strParmRowCount, strParmPagerIndex, strParmPagerSize, strParmPagerIndex, strParmPagerSize, strParmRowCount); sbSql.AppendLine(); sbSql.AppendLine(" OPEN CUR_OUT FOR SELECT * FROM ("); sbSql.AppendFormat(" SELECT * FROM {0} -- Where 条件 ,Order By 排序 放这里",criteria.TableName); sbSql.AppendLine(); sbSql.AppendFormat(" )WHERE ROWNUM BETWEEN {0} AND {1} ;", strParmStartRow, strParmEndRow); sbSql.AppendLine(); sbSql.AppendLine("END;"); string sql = sbSql.ToString(); return sql; }
/// <summary> /// SQL Detail 语句生成 /// </summary> public string GenerateSqlForSelectDetail(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} SELECT DETAIL", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE OR REPLACE PROCEDURE USP_{0}_SELECT_DETAIL_BY", criteria.TableName.ToUpper()); foreach (var item in colPK) { sbSql.AppendFormat("_{0}", item.ColumnName.ToUpper()); } sbSql.Append("("); sbSql.AppendLine(); foreach (var item in colPK) { sbSql.AppendFormat(" {0}{1} IN {2},", criteria.SqlParameterPrefix, item.PublicVarName, item.DataType); sbSql.AppendLine(); } sbSql.Append(" CUR_OUT OUT SYS_REFCURSOR"); sbSql.AppendLine(")"); sbSql.AppendLine("IS"); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat(" OPEN CUR_OUT FOR SELECT * FROM {0} WHERE ", criteria.TableName); foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format("{0} = {1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); else strParameter += string.Format(" AND {0} = {1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.Append(strParameter); sbSql.Append(";"); sbSql.AppendLine(); sbSql.AppendLine("END;"); string sql = sbSql.ToString(); return sql; }
/// <summary> /// SQL UpdateStatus 语句生成 /// </summary> public string GenerateSqlForDelete(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strWhereSql = string.Empty; string strCols = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} DELETE", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE OR REPLACE PROCEDURE USP_{0}_DELETE(", criteria.TableName.ToUpper()); sbSql.AppendLine(); foreach (var item in colPK) { sbSql.AppendFormat(" {0}{1} IN {2},", criteria.SqlParameterPrefix, item.PublicVarName, item.DataType); sbSql.AppendLine(); } sbSql.Append(" resultMsg OUT VARCHAR2"); sbSql.AppendLine(")"); sbSql.AppendLine("IS"); sbSql.Append(" ROWCOUNT NUMBER; "); sbSql.Append("BEGIN "); sbSql.AppendFormat(" SELECT COUNT(*) INTO ROWCOUNT FROM {0} WHERE ", criteria.TableName); foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strWhereSql)) strWhereSql += string.Format("{0} = {1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); else strWhereSql += string.Format(" AND {0} = {1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.Append(strWhereSql); sbSql.Append(";"); sbSql.AppendLine(); sbSql.AppendLine(" IF ROWCOUNT > 0 THEN "); sbSql.AppendFormat(" DELETE FROM {0} ", criteria.TableName); sbSql.AppendFormat(" WHERE {0}; ", strWhereSql); sbSql.AppendLine(); sbSql.AppendFormat(" resultMsg:='{0}{1}'; ", BaseDict.SuccessPrefix, BaseDict.Success); sbSql.AppendLine(); sbSql.AppendLine(" ELSE "); sbSql.AppendFormat(" resultMsg :='{0}{1}' ; ", BaseDict.ErrorPrefix, BaseDict.SqlExMsgNoData); sbSql.AppendLine(); sbSql.AppendLine(" END IF; "); sbSql.AppendLine("END;"); string sql = sbSql.ToString(); return sql; }
/// <summary> /// 生成Model Code /// </summary> /// <param name="resultMsg">执行结果信息</param> /// <param name="tableName">表名</param> /// <param name="dataBaseType">数据库类型</param> /// <param name="dataBaseName">数据库名</param> /// <param name="modelsNamespace">Model层命名空间</param> /// <param name="modelClassNamePrefix">Model层类名前缀</param> public string ModelCodeGeneration(out string resultMsg, string tableName, string dataBaseType = BaseDict.SqlServerData, string dataBaseName = null, string modelsNamespace = null, string modelClassNamePrefix = "Model") { resultMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.DataBaseType = dataBaseType; criteria.TableName = tableName; criteria.ModelsNamespace = modelsNamespace; criteria.ModelClassNamePrefix = modelClassNamePrefix; criteria.DataBaseName = dataBaseName; IGeneration gen = CreateInstance(criteria.DataBaseType); string dbName = CommonMethod.StringToPublicVar(dataBaseName); var className = CommonMethod.StringToPublicVar(criteria.TableName); var colList = gen.QueryColumnsByTable(out resultMsg, criteria); StringBuilder sb = new StringBuilder(); sb.AppendLine("using System;"); sb.AppendLine("using System.Collections.Generic;"); sb.AppendLine("using System.Linq;"); sb.AppendLine("using System.Text;"); sb.AppendLine("using System.ComponentModel.DataAnnotations;"); sb.AppendLine(); if (string.IsNullOrWhiteSpace(modelsNamespace)) sb.AppendFormat("namespace Library.Models.{0}", dbName); else sb.AppendFormat("namespace Library.{0}", criteria.ModelsNamespace); sb.AppendLine(); sb.AppendLine("{"); sb.AppendFormat(" public class {0}{1}", criteria.ModelClassNamePrefix, className); sb.AppendLine(); sb.AppendLine(" {"); foreach (ModelGeneration item in colList) { Type type = CommonMethod.SqlTypeToCsharpType(item.DataType); var regExpression = string.Empty; // CommonMethod.GetRegularExpression(type.Name); if (!string.IsNullOrWhiteSpace(item.ColumnComments)) { sb.AppendLine(" /// <summary> "); sb.AppendFormat(" /// {0} ", item.ColumnComments.Replace(Environment.NewLine, " ")); sb.AppendLine(); sb.AppendLine(" /// </summary>"); } if (!string.IsNullOrWhiteSpace(regExpression)) { if (!item.IsNull) sb.AppendLine(" [Required]"); sb.AppendFormat(" [Display(Name = \"{0}\")]", item.ColumnComments.Replace(Environment.NewLine, " ")); sb.AppendLine(); sb.Append(" " + string.Format(regExpression, item.ColumnComments.Replace(Environment.NewLine," "))); sb.AppendLine(); } sb.AppendFormat(" public {0} {1} ", CommonMethod.TypeConversion(type.Name), item.PublicVarName); sb.Append("{ get;set;} "); sb.AppendLine(Environment.NewLine); } sb.AppendLine(" }"); sb.AppendLine("}"); var code = sb.ToString(); return code; }
public string IFacadeCodeGeneration(out string resultMsg, string tableName, string dataBaseType = BaseDict.SqlServerData, string dataBaseName = null, string modelsNamespace = null, string modelClassNamePrefix = "Model", string dalNamespace = null, string dalClassNamePrefix = "Logic", string facadeNamespace = null, string FacadeClassNamePrefix = "Facade") { resultMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.DataBaseType = dataBaseType; criteria.TableName = tableName; criteria.ModelsNamespace = modelsNamespace; criteria.DalNamespace = dalNamespace; criteria.DalClassNamePrefix = dalClassNamePrefix; criteria.ModelClassNamePrefix = modelClassNamePrefix; criteria.DataBaseName = dataBaseName; IGeneration gen = CreateInstance(criteria.DataBaseType); var colList = gen.QueryColumnsByTable(out resultMsg, criteria); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string dbName = CommonMethod.StringToPublicVar(dataBaseName); var strParameter = string.Empty; //参数 //主键列集合 var colPK = (from ModelGeneration col in colList where col.IsPrimaryKey == true select col).ToList(); StringBuilder sb = new StringBuilder(); #region Top sb.AppendLine("using System;"); sb.AppendLine("using System.Collections.Generic;"); sb.AppendLine("using System.Linq;"); sb.AppendLine("using System.Text;"); sb.AppendLine("using System.Data;"); sb.AppendLine("using Library.Kernel.DataBaseHelper;"); sb.AppendLine("using Library.StringItemDict;"); sb.AppendLine("using Library.Common;"); sb.AppendLine("using System.Data.Common;"); if (string.IsNullOrWhiteSpace(modelsNamespace)) sb.AppendFormat("using Library.Models.{0}", dbName); else sb.AppendFormat("using Library.{0}", criteria.ModelsNamespace); sb.AppendLine(); if (string.IsNullOrWhiteSpace(criteria.DalNamespace)) { sb.AppendFormat("using Library.{0}", "Logics"); } else { sb.AppendFormat("using " + criteria.DalNamespace + ".Interfaces", dbName); sb.AppendLine(); sb.AppendFormat("using " + criteria.DalNamespace + ".Classes", dbName); } sb.AppendLine(); if (string.IsNullOrWhiteSpace(criteria.DalNamespace)) sb.AppendFormat("namespace Library.{0}", "Facades"); else sb.AppendFormat("namespace " + facadeNamespace + ".Interfaces", dbName); sb.AppendLine(); sb.AppendLine("{"); sb.AppendFormat(" public interface I{0}{1}", FacadeClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" {"); #endregion #region Pager sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 分页查询 "); sb.AppendLine(" /// </summary>"); sb.AppendLine(" /// <param name=\"recordCount\">输出参数 数据总数</param>"); sb.AppendLine(" /// <param name=\"criteria\">查询条件对象</param>"); sb.AppendLine(" /// <param name=\"pageSize\">每页显示数量</param>"); sb.AppendLine(" /// <param name=\"pageIndex\">当前页索引</param>"); sb.AppendLine(" /// <returns>结果集 泛型</returns>"); sb.AppendFormat(" public IList<{0}{1}> Query{1}ListPager(out string resultMsg, out decimal recordCount, Criteria{1} criteria, int pageSize = 10, int pageIndex = 1)", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(); #endregion #region Detail sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 查询实体"); sb.AppendLine(" /// </summary>"); foreach (var item in colPK) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; sb.AppendFormat(" /// <param name=\"{0}\">{1}{2} {3}</param>", item.PrivateVarName, criteria.ModelClassNamePrefix, item.PublicVarName, item.ColumnComments); sb.AppendLine(); } sb.AppendFormat(" /// <returns>{0}{1}</returns>", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendFormat(" {0}{1} {2}Detail(out string resultMsg,", criteria.ModelClassNamePrefix, classNamePublic, classNamePublic); foreach (var item in colPK) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format("{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); else strParameter += string.Format(",{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); } sb.Append(strParameter); sb.AppendLine(");"); sb.AppendLine(); #endregion #region InsertUpdate sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 数据 添加/更新"); sb.AppendLine(" /// </summary>"); sb.AppendFormat(" /// <param name=\"{0}\">实体</param>", classNamePrivate); sb.AppendLine(); sb.AppendLine(" /// <returns>执行结果</returns>"); sb.AppendFormat(" int {0}InsertUpdate(out string resultMsg,{1}{2} {3},DbTransaction tran =null);", classNamePublic, criteria.ModelClassNamePrefix, classNamePublic, classNamePrivate); sb.AppendLine(); sb.AppendLine(); #endregion #region UpdateStatus sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 数据状态 更新"); sb.AppendLine(" /// </summary>"); foreach (var item in colList) { if (item.IsPrimaryKey)//判断主键 { sb.AppendFormat(" /// <param name=\"{0}\">{1} {2}</param>", item.PrivateVarName, item.PublicVarName, item.ColumnComments); sb.AppendLine(); } if (item.ColumnName.ToLower().IndexOf("deleted") > -1 || item.ColumnName.ToLower().IndexOf("status") > -1)//判断状态字段 { sb.AppendFormat(" /// <param name=\"{0}\">状态</param>", item.PrivateVarName); sb.AppendLine(); } } sb.AppendLine(" /// <returns>执行结果</returns>"); sb.AppendFormat(" int {0}UpdateStatus(out string resultMsg", classNamePublic); foreach (var item in colList) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; strParameter = string.Empty; if (item.IsPrimaryKey || item.ColumnName.ToLower().IndexOf("deleted") > -1 || item.ColumnName.ToLower().IndexOf("status") > -1) { strParameter += string.Format(",{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); sb.Append(strParameter); } } sb.AppendLine(",DbTransaction tran=null);"); sb.AppendLine(); #endregion #region Detele sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 数据 物理删除"); sb.AppendLine(" /// </summary>"); foreach (var item in colList) { if (item.IsPrimaryKey)//判断主键 { sb.AppendFormat(" /// <param name=\"{0}\">{1} {2}</param>", item.PrivateVarName, item.PublicVarName, item.ColumnComments); sb.AppendLine(); } } sb.AppendLine(" /// <returns>执行结果</returns>"); sb.AppendFormat(" int {0}Delete(out string resultMsg", classNamePublic); foreach (var item in colList) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; strParameter = string.Empty; if (item.IsPrimaryKey) { strParameter += string.Format(",{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); sb.Append(strParameter); } } sb.AppendLine(",DbTransaction tran=null);"); sb.AppendLine(); #endregion sb.AppendLine(" }"); sb.AppendLine("}"); return sb.ToString(); }
/// <summary> /// DAL层代码生成 /// </summary> /// <param name="resultMsg">执行结果信息</param> /// <param name="tableName">表名</param> /// <param name="dataBaseType">数据库类型</param> /// <param name="dataBaseName">数据库名</param> /// <param name="modelsNamespace">Model层命名空间</param> /// <param name="modelClassNamePrefix">Model层类名前缀</param> /// <param name="dalNamespace">Dal层命名空间</param> /// <param name="dalClassNamePrefix">Dal层类名前缀</param> public string DalCodeGeneration(out string resultMsg, string tableName, string dataBaseType = BaseDict.SqlServerData, string dataBaseName = null, string modelsNamespace = null, string modelClassNamePrefix = "Model", string dalNamespace = null, string dalClassNamePrefix = "Logic") { resultMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.DataBaseType = dataBaseType; criteria.TableName = tableName; criteria.ModelsNamespace = modelsNamespace; criteria.DalNamespace = dalNamespace; criteria.DalClassNamePrefix = dalClassNamePrefix; criteria.ModelClassNamePrefix = modelClassNamePrefix; criteria.DataBaseName = dataBaseName; IGeneration gen = CreateInstance(criteria.DataBaseType); var colList = gen.QueryColumnsByTable(out resultMsg, criteria); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string dbName = CommonMethod.StringToPublicVar(dataBaseName); var strParameter = string.Empty; //参数 //主键列集合 var colPK = (from ModelGeneration col in colList where col.IsPrimaryKey == true select col).ToList(); StringBuilder sb = new StringBuilder(); #region Top sb.AppendLine("using System;"); sb.AppendLine("using System.Collections.Generic;"); sb.AppendLine("using System.Linq;"); sb.AppendLine("using System.Text;"); sb.AppendLine("using System.Data;"); sb.AppendLine("using Library.Kernel.DataBaseHelper;"); sb.AppendLine("using Library.StringItemDict;"); sb.AppendLine("using Library.Common;"); sb.AppendLine("using System.Data.Common;"); if(string.IsNullOrWhiteSpace(criteria.ModelsNamespace)) sb.AppendFormat("using Library.Models.CustomsModels;", dbName); else sb.AppendFormat("using Library.Models;"); sb.AppendLine(); if (string.IsNullOrWhiteSpace(criteria.DalNamespace)) sb.AppendFormat("namespace Library.{0}", "Logics"); else sb.AppendFormat("namespace " + criteria.DalNamespace + ".Classes", dbName); sb.AppendLine(); sb.AppendLine("{"); sb.AppendFormat(" public class {0}{1} : I{0}{1}", criteria.DalClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" {"); sb.AppendLine(); #endregion #region GetModel IDataReader sb.AppendLine(" #region 私有函数"); sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// Model 赋值 IDataReader"); sb.AppendLine(" /// </summary>"); sb.AppendFormat(" private IList<{0}{1}> GetModel(IDataReader dr)", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" {"); sb.AppendFormat(" var modelList = new List<{0}{1}>();", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(); sb.AppendLine(" while (dr.Read())"); sb.AppendLine(" {"); sb.AppendFormat(" var model = new {0}{1}();", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); foreach (var item in colList) { var dataType = CommonMethod.SqlTypeToCsharpType(item.DataType); var dataValue = CommonMethod.GetDataValueIsNotNull(dataType.Name, string.Format("dr[\"{0}\"]", item.ColumnName)); sb.AppendFormat(" model.{0} = {1};", item.PublicVarName, dataValue); sb.AppendLine(); } sb.AppendLine(" modelList.Add(model);"); sb.AppendLine(" }"); sb.AppendLine(" return modelList;"); sb.AppendLine(" }"); sb.AppendLine(); #endregion #region GetModel DataSet sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// Model 赋值 DataSet"); sb.AppendLine(" /// </summary>"); sb.AppendFormat(" private IList<{0}{1}> GetModel(DataSet ds)", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" {"); sb.AppendLine(" var modelList = (from DataRow dr in ds.Tables[0].Rows"); sb.AppendFormat(" select new {0}{1}()", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" {"); foreach (var item in colList) { var dataType = CommonMethod.SqlTypeToCsharpType(item.DataType); var dataValue = CommonMethod.GetDataValueIsNotNull(dataType.Name, string.Format("dr[\"{0}\"]", item.ColumnName)); sb.AppendFormat(" {0} = {1},", item.PublicVarName, dataValue); sb.AppendLine(); } sb.Remove(sb.Length - 1, 1); sb.AppendLine(" }).ToList();"); sb.AppendLine(" return modelList;"); sb.AppendLine(" }"); sb.AppendLine(); sb.AppendLine(" #endregion"); sb.AppendLine(); #endregion #region Pager sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 分页查询 "); sb.AppendLine(" /// </summary>"); sb.AppendLine(" /// <param name=\"recordCount\">输出参数 数据总数</param>"); sb.AppendLine(" /// <param name=\"criteria\">查询条件对象</param>"); sb.AppendLine(" /// <param name=\"pageSize\">每页显示数量</param>"); sb.AppendLine(" /// <param name=\"pageIndex\">当前页索引</param>"); sb.AppendLine(" /// <returns>结果集 泛型</returns>"); sb.AppendFormat(" public IList<{0}{1}> Query{1}ListPager(out string resultMsg, out decimal recordCount, Criteria{1}.Pager criteria, int pageSize = 10, int pageIndex = 1)", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" {"); sb.AppendLine(" recordCount = decimal.Zero;"); sb.AppendLine(" resultMsg = string.Empty;"); sb.AppendFormat(" IList<{0}{1}> list = new List<{0}{1}>();", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" try"); sb.AppendLine(" {"); sb.AppendLine(" //存储过程名称"); sb.AppendFormat(" string sql = \"USP_{0}_SELECT_SEARCH_PAGER\";", criteria.TableName.ToUpper()); sb.AppendLine(); sb.AppendLine(); sb.AppendLine(" //参数添加"); sb.AppendLine(" IList<DBParameter> parm = new List<DBParameter>();"); sb.AppendLine(" parm.Add(new DBParameter() { ParameterName = \"PagerSize\", ParameterValue = pageSize, ParameterInOut = BaseDict.ParmIn, ParameterType = DbType.String });"); sb.AppendLine(" parm.Add(new DBParameter() { ParameterName = \"PagerIndex\", ParameterValue = pageIndex, ParameterInOut = BaseDict.ParmIn, ParameterType = DbType.String });"); sb.AppendLine(" parm.Add(new DBParameter() { ParameterName = \"RowCount\", ParameterInOut = BaseDict.ParmOut, ParameterType = DbType.String });"); sb.AppendLine(); sb.AppendLine(" //查询执行"); sb.AppendLine(" using (IDataReader dr = DBHelper.ExecuteReader(sql, true, parm))"); sb.AppendLine(" {"); sb.AppendLine(" //DataReader 转换成 List"); sb.AppendLine(" list = GetModel(dr);"); sb.AppendLine(" foreach (var item in parm)"); sb.AppendLine(" {"); sb.AppendLine(" //获取输出参数值"); sb.AppendLine(" if (item.ParameterName == \"RowCount\")"); sb.AppendLine(" {"); sb.AppendLine(" decimal.TryParse(item.ParameterValue.ToString(), out recordCount);"); sb.AppendLine(" break;"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" catch (Exception ex)"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = string.Format(\"{0} {1}\", BaseDict.ErrorPrefix, ex.ToString());"); sb.AppendLine(" }"); sb.AppendLine(" return list;"); sb.AppendLine(" }"); sb.AppendLine(); sb.AppendLine(); #endregion #region Detail sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 查询实体"); sb.AppendLine(" /// </summary>"); foreach (var item in colPK) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; sb.AppendFormat(" /// <param name=\"{0}\">{1}{2} {3}</param>", item.PrivateVarName, criteria.ModelClassNamePrefix, item.PublicVarName, item.ColumnComments); sb.AppendLine(); } sb.AppendFormat(" /// <returns>{0}{1}</returns>", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendFormat(" public {0}{1} {2}Detail(out string resultMsg,", criteria.ModelClassNamePrefix, classNamePublic, classNamePublic); foreach (var item in colPK) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format("{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); else strParameter += string.Format(",{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); } sb.Append(strParameter); sb.AppendLine(")"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = string.Empty;"); sb.AppendFormat(" var model = new {0}{1}();", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" try"); sb.AppendLine(" {"); sb.AppendLine(" //存储过程名称"); sb.AppendFormat(" string sql = \"USP_{0}_SELECT_DETAIL_BY", criteria.TableName.ToUpper()); foreach (var item in colPK) { sb.AppendFormat("_{0}", item.ColumnName.ToUpper()); } sb.AppendLine("\";"); sb.AppendLine(); sb.AppendLine(" //参数添加"); sb.AppendLine(" IList<DBParameter> parm = new List<DBParameter>();"); foreach (var item in colPK) { sb.Append(" parm.Add(new DBParameter() { "); sb.AppendFormat("ParameterName = \"{0}\", ", item.PrivateVarName.ToUpper()); sb.AppendFormat("ParameterValue = {0}, ParameterInOut = BaseDict.ParmIn, ParameterType = {1} ", item.PrivateVarName, CommonMethod.SqlTypeToCsharpTypeString(item.DataType)); sb.AppendLine("});"); } sb.AppendLine(); sb.AppendLine(" //查询执行"); sb.AppendLine(" using (IDataReader dr = DBHelper.ExecuteReader(sql, true, parm))"); sb.AppendLine(" {"); sb.AppendFormat(" IList<{0}{1}> list = GetModel(dr);", criteria.ModelClassNamePrefix, classNamePublic); sb.AppendLine(); sb.AppendLine(" model = list.First();"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" catch (Exception ex)"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = string.Format(\"{0} {1}\", BaseDict.ErrorPrefix, ex.ToString());"); sb.AppendLine(" }"); sb.AppendLine(" return model;"); sb.AppendLine(" }"); sb.AppendLine(); #endregion #region InsertUpdate sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 数据 添加/更新"); sb.AppendLine(" /// </summary>"); sb.AppendFormat(" /// <param name=\"{0}\">实体</param>", classNamePrivate); sb.AppendLine(); sb.AppendLine(" /// <returns>执行结果</returns>"); sb.AppendFormat(" public int {0}InsertUpdate(out string resultMsg,{1}{2} {3},DbTransaction tran =null)", classNamePublic, criteria.ModelClassNamePrefix, classNamePublic, classNamePrivate); sb.AppendLine(); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = string.Empty;"); sb.AppendLine(" int res = 0;"); sb.AppendLine(" try"); sb.AppendLine(" {"); sb.AppendLine(" //存储过程名称"); sb.AppendFormat(" string sql = \"USP_{0}_INSERT_UPDATE\";", criteria.TableName.ToUpper()); sb.AppendLine(); sb.AppendLine(" //参数添加"); sb.AppendLine(" IList<DBParameter> parm = new List<DBParameter>();"); foreach (var item in colList) { sb.Append(" parm.Add(new DBParameter() { "); sb.AppendFormat("ParameterName = \"{0}\", ", item.PrivateVarName.ToUpper()); sb.AppendFormat("ParameterValue = {0}.{1}, ParameterInOut = BaseDict.ParmIn, ParameterType = {2} ", classNamePrivate, item.PublicVarName, CommonMethod.SqlTypeToCsharpTypeString(item.DataType)); sb.AppendLine("});"); } sb.AppendLine(" parm.Add(new DBParameter() { ParameterName = \"resultMsg\", ParameterInOut = BaseDict.ParmOut, ParameterType = DbType.String });"); sb.AppendLine(); sb.AppendLine(" //新增/更新执行"); sb.AppendLine(" res = DBHelper.ExecuteNonQuery(sql, true, parm, tran);"); sb.AppendLine(" foreach (var item in parm)"); sb.AppendLine(" {"); sb.AppendLine(" //获取输出参数值"); sb.AppendLine(" if (item.ParameterName == \"resultMsg\")"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = item.ParameterValue.ToString();"); sb.AppendLine(" break;"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" catch (Exception ex)"); sb.AppendLine(" {"); sb.AppendLine(" if(tran != null)"); sb.AppendLine(" tran.Rollback();"); sb.AppendLine(" resultMsg = string.Format(\"{0} {1}\", BaseDict.ErrorPrefix, ex.ToString());"); sb.AppendLine(" }"); sb.AppendLine(" return res;"); sb.AppendLine(" }"); sb.AppendLine(); #endregion #region UpdateStatus sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 数据状态 更新"); sb.AppendLine(" /// </summary>"); foreach (var item in colList) { if (item.IsPrimaryKey)//判断主键 { sb.AppendFormat(" /// <param name=\"{0}\">{1} {2}</param>", item.PrivateVarName, item.PublicVarName, item.ColumnComments); sb.AppendLine(); } if (item.ColumnName.ToLower().IndexOf("deleted") > -1 || item.ColumnName.ToLower().IndexOf("status") > -1)//判断状态字段 { sb.AppendFormat(" /// <param name=\"{0}\">状态</param>", item.PrivateVarName); sb.AppendLine(); } } sb.AppendLine(" /// <returns>执行结果</returns>"); sb.AppendFormat(" public int {0}UpdateStatus(out string resultMsg", classNamePublic); foreach (var item in colList) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; strParameter = string.Empty; if (item.IsPrimaryKey || item.ColumnName.ToLower().IndexOf("deleted") > -1 || item.ColumnName.ToLower().IndexOf("status") > -1) { strParameter += string.Format(",{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); sb.Append(strParameter); } } sb.AppendLine(",DbTransaction tran=null)"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = string.Empty;"); sb.AppendLine(" int res = 0;"); sb.AppendLine(" try"); sb.AppendLine(" {"); sb.AppendLine(" //存储过程名称"); sb.AppendFormat(" string sql = \"USP_{0}_UPDATE_STATUS\";", criteria.TableName); sb.AppendLine(); sb.AppendLine(" //参数添加"); sb.AppendLine(" IList<DBParameter> parm = new List<DBParameter>();"); foreach (var item in colList) { strParameter = string.Empty; if (item.IsPrimaryKey || item.ColumnName.ToLower().IndexOf("deleted") > -1 || item.ColumnName.ToLower().IndexOf("status") > -1) { sb.Append(" parm.Add(new DBParameter() { "); sb.AppendFormat("ParameterName = \"{0}\", ", item.PrivateVarName.ToUpper()); sb.AppendFormat("ParameterValue = {0}, ParameterInOut = BaseDict.ParmIn, ParameterType = {1} ", item.PrivateVarName, CommonMethod.SqlTypeToCsharpTypeString(item.DataType)); sb.AppendLine("});"); } } sb.AppendLine(" parm.Add(new DBParameter() { ParameterName = \"resultMsg\", ParameterInOut = BaseDict.ParmOut, ParameterType = DbType.String });"); sb.AppendLine(" //更新执行"); sb.AppendLine(" res = DBHelper.ExecuteNonQuery(sql, true, parm, tran);"); sb.AppendLine(" foreach (var item in parm)"); sb.AppendLine(" {"); sb.AppendLine(" //获取输出参数值"); sb.AppendLine(" if (item.ParameterName == \"resultMsg\")"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = item.ParameterValue.ToString();"); sb.AppendLine(" break;"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" catch (Exception ex)"); sb.AppendLine(" {"); sb.AppendLine(" if(tran != null)"); sb.AppendLine(" tran.Rollback();"); sb.AppendLine(" resultMsg = string.Format(\"{0} {1}\", BaseDict.ErrorPrefix, ex.ToString());"); sb.AppendLine(" }"); sb.AppendLine(" return res;"); sb.AppendLine(" }"); sb.AppendLine(); #endregion #region Detele sb.AppendLine(" /// <summary>"); sb.AppendLine(" /// 数据 删除"); sb.AppendLine(" /// </summary>"); foreach (var item in colList) { if (item.IsPrimaryKey)//判断主键 { sb.AppendFormat(" /// <param name=\"{0}\">{1} {2}</param>", item.PrivateVarName, item.PublicVarName, item.ColumnComments); sb.AppendLine(); } } sb.AppendLine(" /// <returns>执行结果</returns>"); sb.AppendFormat(" public int {0}Delete(out string resultMsg", classNamePublic); foreach (var item in colList) { string dataTypeName = CommonMethod.SqlTypeToCsharpType(item.DataType).Name; strParameter = string.Empty; if (item.IsPrimaryKey) { strParameter += string.Format(",{0} {1} ", CommonMethod.TypeConversion(dataTypeName), item.PrivateVarName); sb.Append(strParameter); } } sb.AppendLine(",DbTransaction tran=null)"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = string.Empty;"); sb.AppendLine(" int res = 0;"); sb.AppendLine(" try"); sb.AppendLine(" {"); sb.AppendLine(" //存储过程名称"); sb.AppendFormat(" string sql = \" USP_{0}_DELETE \" ;", criteria.TableName.ToUpper()); sb.AppendLine(); sb.AppendLine(); sb.AppendLine(" //参数添加"); sb.AppendLine(" IList<DBParameter> parm = new List<DBParameter>();"); foreach (var item in colList) { strParameter = string.Empty; if (item.IsPrimaryKey) { sb.Append(" parm.Add(new DBParameter() { "); sb.AppendFormat("ParameterName = \"{0}\", ", item.PrivateVarName.ToUpper()); sb.AppendFormat("ParameterValue = {0}, ParameterInOut = BaseDict.ParmIn, ParameterType = {1} ", item.PrivateVarName, CommonMethod.SqlTypeToCsharpTypeString(item.DataType)); sb.AppendLine("});"); } } sb.AppendLine(" parm.Add(new DBParameter() { ParameterName = \"resultMsg\", ParameterInOut = BaseDict.ParmOut, ParameterType = DbType.String });"); sb.AppendLine(" //更新执行"); sb.AppendLine(" res = DBHelper.ExecuteNonQuery(sql, true, parm, tran);"); sb.AppendLine(" foreach (var item in parm)"); sb.AppendLine(" {"); sb.AppendLine(" //获取输出参数值"); sb.AppendLine(" if (item.ParameterName == \"resultMsg\")"); sb.AppendLine(" {"); sb.AppendLine(" resultMsg = item.ParameterValue.ToString();"); sb.AppendLine(" break;"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" }"); sb.AppendLine(" catch (Exception ex)"); sb.AppendLine(" {"); sb.AppendLine(" if(tran != null)"); sb.AppendLine(" tran.Rollback();"); sb.AppendLine(" resultMsg = string.Format(\"{0} {1}\", BaseDict.ErrorPrefix, ex.ToString());"); sb.AppendLine(" }"); sb.AppendLine(" return res;"); sb.AppendLine(" }"); sb.AppendLine(); #endregion sb.AppendLine(" }"); sb.AppendLine("}"); return sb.ToString(); }
/// <summary> /// SQL Detail 语句生成 /// </summary> public string GenerateSqlForSelectDetail(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strWhereSql = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} SELECT DETAIL", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE PROCEDURE usp_{0}_select_detail_by", criteria.TableName.ToLower()); foreach (var item in colPK) { sbSql.AppendFormat("_{0}", item.ColumnName.ToLower()); } sbSql.AppendLine(); foreach (var item in colPK) { var strSqlTypeAndLength = GetSqlTypeAndLength(item); if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format(" @{0}{1} {2}", criteria.SqlParameterPrefix, item.PublicVarName, strSqlTypeAndLength); else strParameter += string.Format(",{0} @{1}{2} {3}", Environment.NewLine, criteria.SqlParameterPrefix, item.PublicVarName, strSqlTypeAndLength); } sbSql.AppendLine(strParameter); sbSql.AppendLine("AS"); sbSql.AppendLine(" BEGIN "); sbSql.AppendFormat(" SELECT * FROM {0} WHERE ", criteria.TableName); foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strWhereSql)) strWhereSql += string.Format("[{0}] = @{1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); else strWhereSql += string.Format(" AND [{0}] = @{1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.Append(strWhereSql); sbSql.AppendLine(); sbSql.AppendLine(" END "); string sql = sbSql.ToString(); return sql; }
/// <summary> /// SQL Select Pager 语句生成 /// </summary> public string GenerateSqlForSelectPager(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strWhereSql = string.Empty; string strCols = string.Empty; string strParmPagerIndex = string.Format("{0}PagerIndex", criteria.SqlParameterPrefix); string strParmPagerSize = string.Format("{0}PagerSize", criteria.SqlParameterPrefix); string strParmRowCount = string.Format("{0}RowCount", criteria.SqlParameterPrefix); string strParmTotalPages = string.Format("{0}TotalPages", criteria.SqlParameterPrefix); string strParmStartRow = string.Format("{0}StartRow", criteria.SqlParameterPrefix); string strParmEndRow = string.Format("{0}EndRow", criteria.SqlParameterPrefix); StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} DELETE", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE PROCEDURE usp_{0}_select_pager ", criteria.TableName.ToLower()); sbSql.AppendLine(); sbSql.AppendFormat(" @{0} INT , ", strParmPagerIndex); sbSql.AppendLine(); sbSql.AppendFormat(" @{0} INT , ", strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" @{0} INT OUT ,", strParmRowCount); sbSql.AppendLine(); sbSql.AppendFormat(" @{0} INT OUT ", strParmTotalPages); sbSql.AppendLine(); sbSql.AppendLine("AS"); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat(" DECLARE @{0} INT ,@{1} INT", strParmStartRow, strParmEndRow); sbSql.AppendLine(); sbSql.AppendFormat(" SET @{0} = (", strParmRowCount); sbSql.AppendLine(); sbSql.AppendFormat(" SELECT COUNT(*) FROM {0}", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine(" --WHERE 语句"); sbSql.AppendFormat(" )", criteria.TableName); sbSql.AppendLine(); sbSql.AppendFormat(" SET @{0} = CEILING(CONVERT(FLOAT, @{1}) / @{2})", strParmTotalPages, strParmRowCount, strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" IF @{0} > @{1} ", strParmPagerIndex, strParmTotalPages); sbSql.AppendLine(); sbSql.AppendFormat(" SET @{0} = @{1}", strParmPagerIndex, strParmTotalPages); sbSql.AppendLine(); sbSql.AppendFormat(" IF @{0} < 1 ", strParmPagerIndex); sbSql.AppendLine(); sbSql.AppendFormat(" SET @{0} = 1", strParmPagerIndex); sbSql.AppendLine(); sbSql.AppendFormat(" SET @{0} = ( @{1} - 1 ) * @{2} + 1", strParmStartRow, strParmPagerIndex, strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" IF @{0} > @{1} * @{2} ", strParmRowCount, strParmPagerIndex, strParmPagerSize); sbSql.AppendLine(); sbSql.AppendFormat(" SET @{0} = @{1} * @{2} ", strParmEndRow, strParmPagerIndex, strParmPagerSize); sbSql.AppendLine(); sbSql.AppendLine(" ELSE "); sbSql.AppendFormat(" SET @{0} = @{1} ; ", strParmEndRow, strParmRowCount); sbSql.AppendLine(); sbSql.AppendLine(" WITH temptbl AS ( "); sbSql.Append(" SELECT ROW_NUMBER() OVER ( ORDER BY "); strCols = string.Empty; foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strCols)) strCols += string.Format(" [{0}] ", item.ColumnName); else strCols += string.Format(", [{0}] ",item.ColumnName); } sbSql.Append(strCols); sbSql.Append(" DESC ) AS 'row_no' ,* "); sbSql.AppendLine(); sbSql.AppendFormat(" FROM {0} ",criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine(" --WHERE --where 条件"); sbSql.AppendLine(" )"); sbSql.AppendLine(" SELECT * FROM temptbl "); sbSql.AppendFormat(" WHERE row_no BETWEEN @{0} AND @{1}", strParmStartRow, strParmEndRow); sbSql.AppendLine(); sbSql.AppendLine("END"); string sql = sbSql.ToString(); return sql; }
/// <summary> /// 根据表名查询列集合 /// </summary> /// <param name="tableName">表名</param> public IList<ModelGeneration> QueryColumnsByTable(out string resultMsg, GeneratorCriteria criteria) { IList<ModelGeneration> list = new List<ModelGeneration>(); resultMsg = string.Empty; try { //存储过程名称 #region SQL拼接 StringBuilder SQL = new StringBuilder(); SQL.Append("SELECT "); SQL.Append(" CASE "); SQL.Append(" WHEN F.COLUMN_NAME = A.COLUMN_NAME "); SQL.Append(" THEN 1 "); SQL.Append(" ELSE 0 "); SQL.Append(" END AS PRIMARYKEY, "); SQL.Append(" C.TABLE_TYPE, "); SQL.Append(" C.COMMENTS TABCOMMENTS, "); SQL.Append(" B.COMMENTS COLCOMMENTS, "); SQL.Append(" A.* "); SQL.Append("FROM USER_TAB_COLUMNS A "); SQL.Append("INNER JOIN USER_COL_COMMENTS B "); SQL.Append("ON A.TABLE_NAME = B.TABLE_NAME "); SQL.Append("AND A.TABLE_NAME =:TABLE_NAME "); SQL.Append("AND A.COLUMN_NAME = B.COLUMN_NAME "); SQL.Append("INNER JOIN USER_TAB_COMMENTS C "); SQL.Append("ON C.TABLE_NAME = A.TABLE_NAME "); SQL.Append("LEFT JOIN "); SQL.Append(" (SELECT COL.* "); SQL.Append(" FROM USER_CONSTRAINTS CON, "); SQL.Append(" USER_CONS_COLUMNS COL "); SQL.Append(" WHERE CON.CONSTRAINT_NAME=COL.CONSTRAINT_NAME "); SQL.Append(" AND CON.CONSTRAINT_TYPE ='P' "); SQL.Append(" AND COL.TABLE_NAME =:TABLE_NAME "); SQL.Append(" ) F "); SQL.Append("ON F.COLUMN_NAME = A.COLUMN_NAME "); #endregion string sql = SQL.ToString(); //参数添加 IList<DBParameter> parm = new List<DBParameter>(); parm.Add(new DBParameter() { ParameterName = "TABLE_NAME", ParameterValue = criteria.TableName, ParameterInOut = BaseDict.ParmIn, ParameterType = DbType.String }); //查询执行 using (IDataReader dr = DBHelper.ExecuteReader(sql, false, parm)) { list = GetColumnModel(dr); } } catch (Exception EX) { resultMsg = string.Format("{0} {1}", BaseDict.ErrorPrefix, EX.ToString()); } return list; }
/// <summary> /// 根据表名查询列集合 /// </summary> /// <param name="tableName">表名</param> public IList<ModelGeneration> QueryColumnsByTable(out string resultMsg, GeneratorCriteria criteria) { IList<ModelGeneration> list = new List<ModelGeneration>(); resultMsg = string.Empty; try { //存储过程名称 #region SQL语句 string strSql = @"USE {0} SELECT COL.name AS [COLUMN_NAME] , COL.isnullable AS [NULLABLE] , col.length AS [DATA_LENGTH] , col.prec AS [PREC] , col.scale AS [SCALE] , SEP.Value AS [COLCOMMENTS] , ST.name AS [DATA_TYPE] , COLUMNPROPERTY(COL.id, COL.name, 'IsIdentity') AS [IsIdentity] , [PRIMARYKEY] = CASE WHEN EXISTS ( SELECT 1 FROM sysobjects WHERE xtype = 'PK' AND parent_obj = COL.id AND name IN ( SELECT name FROM sysindexes WHERE indid IN ( SELECT indid FROM sysindexkeys WHERE id = COL.id AND colid = COL.colid ) ) ) THEN '1' ELSE '0' END FROM SysColumns COL LEFT JOIN sys.extended_properties SEP ON COL.id = SEP.major_id AND COL.colid = SEP.minor_id LEFT JOIN systypes ST ON COL.xusertype = ST.xusertype WHERE COL.id = OBJECT_ID(@TableName)"; strSql = string.Format(strSql, criteria.DataBaseName); #endregion //参数添加 IList<DBParameter> parm = new List<DBParameter>(); parm.Add(new DBParameter() { ParameterName = "@TableName", ParameterValue = criteria.TableName, ParameterInOut = BaseDict.ParmIn, ParameterType = DbType.String }); //查询执行 using (IDataReader dr = DBHelper.ExecuteReader(strSql, false, parm)) { list = GetColumnModel(dr); } } catch (Exception EX) { resultMsg = string.Format("{0} {1}", BaseDict.ErrorPrefix, EX.Message); } return list; }
/// <summary> /// 查询所有表名集合 /// </summary> public IList<ModelGeneration> QueryTablesAll(out string resultMsg, GeneratorCriteria criteria = null) { IList<ModelGeneration> list = new List<ModelGeneration>(); resultMsg = string.Empty; try { //存储过程名称 string strSql = "SELECT * FROM USER_TAB_COMMENTS "; //查询执行 using (IDataReader dr = DBHelper.ExecuteReader(strSql, false)) { list = GetTableModel(dr); } } catch (Exception EX) { resultMsg = string.Format("{0} {1}", BaseDict.ErrorPrefix, EX.Message); } return list; }
/// <summary> /// SQL Insert/Update 语句生成 /// </summary> public string GenerateSqlForInsertUpdate(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strWhereSql = string.Empty; string strCols = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} INSERT UPDATE", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE PROCEDURE usp_{0}_insert_update ", criteria.TableName.ToLower()); sbSql.AppendLine(); foreach (var item in colList) { var strSqlTypeAndLength = GetSqlTypeAndLength(item); if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format(" @{0}{1} {2}", criteria.SqlParameterPrefix, item.PublicVarName, strSqlTypeAndLength); else strParameter += string.Format(",{0} @{1}{2} {3}", Environment.NewLine, criteria.SqlParameterPrefix, item.PublicVarName, strSqlTypeAndLength); } sbSql.AppendLine(strParameter); //sbSql.AppendLine(" @resultMsg NVARCHAR(500) OUT"); sbSql.AppendLine("AS"); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat("IF EXISTS(SELECT * FROM {0} WHERE ", criteria.TableName); foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strWhereSql)) strWhereSql += string.Format("[{0}] = @{1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); else strWhereSql += string.Format(" AND [{0}] = @{1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.Append(strWhereSql); sbSql.Append(")"); sbSql.AppendLine(); sbSql.AppendLine(" BEGIN"); sbSql.AppendFormat(" UPDATE {0} ", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine(" SET"); strParameter = string.Empty; foreach (var item in colList) { if (string.IsNullOrWhiteSpace(strParameter)) { if (item.IsNull) strParameter += string.Format(" [{0}] = @{1}{2} ", criteria.SqlParameterPrefix, item.PublicVarName); else strParameter += string.Format(" [{0}] = CASE WHEN @{1}{2} IS NOT NULL THEN @{1}{2} ELSE [{0}] END ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName ); } else { if(item.IsNull) strParameter += string.Format(",{0} [{1}] = @{2}{3} ", Environment.NewLine, item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName ); else strParameter += string.Format(",{0} [{1}] = CASE WHEN @{2}{3} IS NOT NULL THEN @{2}{3} ELSE [{1}] END ", Environment.NewLine, item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName ); } } sbSql.AppendLine(strParameter); sbSql.AppendFormat(" WHERE {0} ", strWhereSql); sbSql.AppendLine(); sbSql.AppendLine(" END "); sbSql.AppendLine(" ELSE "); sbSql.AppendLine(" BEGIN "); sbSql.AppendFormat(" INSERT INTO {0} ( ", criteria.TableName); sbSql.AppendLine(); foreach (var item in colList) { if (string.IsNullOrWhiteSpace(strCols)) strCols += string.Format(" [{0}]", item.ColumnName); else strCols += string.Format(",{0} [{1}] ", Environment.NewLine, item.ColumnName); } sbSql.AppendLine(strCols); sbSql.AppendLine(" ) VALUES ( "); strCols = string.Empty; foreach (var item in colList) { if (string.IsNullOrWhiteSpace(strCols)) strCols += string.Format(" @{0}{1}", criteria.SqlParameterPrefix, item.PublicVarName); else strCols += string.Format(",{0} @{1}{2} ", Environment.NewLine, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.AppendLine(strCols); sbSql.AppendLine(" ) "); sbSql.AppendLine(" END"); sbSql.AppendLine("END"); //sbSql.AppendLine("IF @@ERROR <> 0 "); //sbSql.AppendLine("BEGIN "); //sbSql.AppendLine(" SET @resultMsg = 'Error:Failed to InsertUpdate charge.' "); //sbSql.AppendLine(" RETURN "); //sbSql.AppendLine("END "); //sbSql.AppendLine("ELSE "); //sbSql.AppendLine("BEGIN "); //sbSql.AppendLine(" SET @resultMsg = 'Success' "); //sbSql.AppendLine("END;"); string sql = sbSql.ToString(); return sql; }
/// <summary> /// SQL Insert/Update 语句生成 /// </summary> public string GenerateSqlForInsertUpdate(out string resultMsg, GeneratorCriteria criteria) { resultMsg = string.Empty; //查询字段列表 var colList = QueryColumnsByTable(out resultMsg, criteria); //查询主键字段列表 var colPK = (from ModelGeneration model in colList where model.IsPrimaryKey == true select model).ToList(); string classNamePrivate = CommonMethod.StringToPrivateVar(criteria.TableName); string classNamePublic = CommonMethod.StringToPublicVar(criteria.TableName); string strParameter = string.Empty; string strWhereSql = string.Empty; string strCols = string.Empty; StringBuilder sbSql = new StringBuilder(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendLine("-- Author: Jason.Yao"); sbSql.AppendFormat("-- Create date: {0}", DateTime.Now.ToString("yyyy-MM-dd")); sbSql.AppendLine(); sbSql.AppendFormat("-- Description: {0} INSERT UPDATE", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine("-- ==========================================================="); sbSql.AppendFormat("CREATE OR REPLACE PROCEDURE USP_{0}_INSERT_UPDATE(", criteria.TableName.ToUpper()); sbSql.AppendLine(); foreach (var item in colList) { if(string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format(" {0}{1} IN {2}", criteria.SqlParameterPrefix, item.PublicVarName, item.DataType); else strParameter += string.Format(",{0} {1}{2} IN {3}", Environment.NewLine,criteria.SqlParameterPrefix, item.PublicVarName, item.DataType); } sbSql.AppendLine(strParameter); //sbSql.Append(" resultMsg OUT VARCHAR2"); sbSql.AppendLine(")"); sbSql.AppendLine("IS"); sbSql.AppendLine(" ROWCOUNT NUMBER; "); sbSql.AppendLine("BEGIN "); sbSql.AppendFormat(" SELECT COUNT(*) INTO ROWCOUNT FROM {0} WHERE ",criteria.TableName); foreach (var item in colPK) { if (string.IsNullOrWhiteSpace(strWhereSql)) strWhereSql += string.Format("{0} = {1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); else strWhereSql += string.Format(" AND {0} = {1}{2} ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName); } sbSql.Append(strWhereSql); sbSql.Append(";"); sbSql.AppendLine(); sbSql.AppendLine(" IF ROWCOUNT > 0 THEN "); sbSql.AppendFormat(" UPDATE {0} ", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine(" SET"); strParameter = string.Empty; foreach (var item in colList) { if (string.IsNullOrWhiteSpace(strParameter)) strParameter += string.Format(" {0} = CASE WHEN {1}{2} IS NOT NULL THEN {3}{4} ELSE {5} END ", item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName, criteria.SqlParameterPrefix, item.PublicVarName, item.ColumnName); else strParameter += string.Format(",{0} {1} = CASE WHEN {2}{3} IS NOT NULL THEN {4}{5} ELSE {6} END ", Environment.NewLine, item.ColumnName, criteria.SqlParameterPrefix, item.PublicVarName, criteria.SqlParameterPrefix, item.PublicVarName, item.ColumnName); } sbSql.AppendLine(strParameter); sbSql.AppendFormat(" WHERE {0}; ",strWhereSql); sbSql.AppendLine(); sbSql.AppendLine(" ELSE "); sbSql.AppendFormat(" INSERT INTO {0} ", criteria.TableName); sbSql.AppendLine(); sbSql.AppendLine(" ( "); foreach (var item in colList) { if (string.IsNullOrWhiteSpace(strCols)) strCols += string.Format(" {0}",item.ColumnName); else strCols += string.Format(",{0} {1} ", Environment.NewLine,item.ColumnName); } sbSql.AppendLine(strCols); sbSql.AppendLine(" ) "); sbSql.AppendLine(" VALUES "); sbSql.AppendLine(" ( "); strCols = string.Empty; foreach (var item in colList) { if (string.IsNullOrWhiteSpace(strCols)) strCols += string.Format(" {0}{1}", criteria.SqlParameterPrefix, item.PublicVarName); else strCols += string.Format(",{0} {1}{2} ", Environment.NewLine, criteria.SqlParameterPrefix , item.PublicVarName); } sbSql.AppendLine(strCols); sbSql.AppendLine(" ); "); sbSql.AppendLine(" END IF; "); sbSql.AppendLine("END;"); string sql = sbSql.ToString(); return sql; }
public void QueryColumnsByTableTest() { string errorMsg = string.Empty; var criteria = new GeneratorCriteria(); criteria.DataBaseName = "CardMaintain"; criteria.TableName = "Bank"; IList<ModelGeneration> res1 = null; var res = dal.QueryColumnsByTable(out errorMsg, criteria); Assert.AreNotEqual(res, res1); var PublicColName = string.Empty; var publicCName = res[0].PublicVarName; var pk = res[0].IsPrimaryKey; Assert.AreNotEqual(PublicColName, publicCName); }
/// <summary> /// 查询数据表 集合 /// </summary> /// <param name="resultMsg"></param> /// <param name="DataBaseType">数据库类型</param> /// <param name="DataBaseName">数据库名称</param> /// <returns></returns> public IList<ModelGeneration> QueryTablesAll(out string resultMsg, string DataBaseType, string DataBaseName = null) { resultMsg = string.Empty; GeneratorCriteria criteria = new GeneratorCriteria() { DataBaseName = DataBaseName }; IGeneration gen = CreateInstance(DataBaseType); var list = gen.QueryTablesAll(out resultMsg, criteria); return list; }