Click here to Skip to main content
15,895,833 members
Articles / Programming Languages / XML

netTierGenerator

Rate me:
Please Sign up or sign in to vote.
4.81/5 (20 votes)
30 Nov 2008CPOL14 min read 67.6K   2.8K   108  
A 3-tier application framework and code generation tool - the way for rapid and effective development.
using System;
using System.Collections.Generic;
using System.Text;
using TierGenerator.Common.Util.Model;
using TierGenerator.Common.Util.Generate;
using System.IO;

namespace TierGenerator.Common.Util.MsSql.ObjectGenerate
{
    internal class DalBuilder
    {
        #region Class Members
        private TierModel tierModel;
        private string serviceName;
        #endregion

        public DalBuilder(TierModel tierModel)
        {
            this.tierModel = tierModel;
            this.serviceName = ServiceBuilderHelper.GetServiceNameByNamespace(tierModel.ServiceName);
        }

        #region Public Properties
        public TierModel TierModel
        {
            get { return tierModel; }
        }
        public string ServiceName
        {
            get { return serviceName; }
        }
        #endregion

        #region Public Methods
        public void Generate()
        {
            ProjectItem dalProjectItem = GenerateDalService();
            ProjectItem dalProjectItemTg = GenerateDalService_TG();

            dalProjectItemTg.Parent = dalProjectItem;
            dalProjectItemTg.Dependency = ProjectItemDependencies.Code;

            string csprojPath = ServiceBuilderHelper.GetCsprojFile(this.TierModel.Settings.DalPath);
            ServiceBuilderHelper.UpdateCsprojFile(csprojPath, dalProjectItemTg);
            ServiceBuilderHelper.UpdateCsprojFile(csprojPath, dalProjectItem);
        }
        #endregion

        #region Helper Methods

        private ProjectItem GenerateDalService()
        {
            string dalFileName = String.Concat(ServiceBuilderHelper.MakeNamespaceFolder(TierModel.Settings.DalPath, TierModel.Namespace), ServiceName, "Dal.cs");
            if (File.Exists(dalFileName))
            {
                return null;
            }

            StringBuilder dalService = GenerateEmptyDalText();
            ServiceBuilderHelper.SaveToFile(dalFileName, dalService.ToString());
            return new ProjectItem(
                    Path.GetFileName(dalFileName),
                    String.Concat(this.TierModel.Namespace, "\\", Path.GetFileName(dalFileName)),
                    ProjectItemTypes.Compile
                );
        }
        private ProjectItem GenerateDalService_TG()
        {
            StringBuilder dalService = new StringBuilder(20000);
            string dalFileName = String.Concat(ServiceBuilderHelper.MakeNamespaceFolder(TierModel.Settings.DalPath, TierModel.Namespace), ServiceName, "Dal.ntg.cs");

            GenerateDalServiceHeader_TG(dalService);
            GenerateDalServiceConstant_TG(dalService);
            GenerateInfoDalService_TG(dalService);
            GenerateSelectUdfDalService_TG(dalService);
            GenerateUpdateUdfDalService_TG(dalService);
            GenerateDeleteUdfDalService_TG(dalService);
            GenerateDalServiceFooter_TG(dalService);

            ServiceBuilderHelper.SaveToFile(dalFileName, dalService.ToString());
            return new ProjectItem(
                    Path.GetFileName(dalFileName),
                    String.Concat(this.TierModel.Namespace, "\\", Path.GetFileName(dalFileName)),
                    ProjectItemTypes.Compile
                );
        }
        private void GenerateDalServiceHeader_TG(StringBuilder dalService)
        {
            dalService.AppendLine("using System;");
            dalService.AppendLine("using System.Text;");
            dalService.AppendLine("using System.Data;");
            dalService.AppendLine("using System.Data.Common;");
            dalService.AppendLine("using System.Data.SqlClient;");
            dalService.AppendLine("using System.Collections.Generic;");
            dalService.AppendLine();
            dalService.AppendLine(String.Format("using {0}.Common.Data;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.Common.Exception;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.Model.{1};", TierModel.Solution, TierModel.Namespace));
            dalService.AppendLine(String.Format("using {0}.MsSqlDal.Util;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.IDal;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.IDal.{1};", TierModel.Solution, TierModel.Namespace));
            dalService.AppendLine(String.Format("using {0}.Common.Util;", TierModel.Solution));
            if (TierModel.DeclarationList.Count > 0)
            {
                dalService.Append(TierModel.AdditionalUsingString);
            }
            dalService.AppendLine();

            // namespace and class declaration
            dalService.AppendLine(String.Format("namespace {0}.MsSqlDal.{1}", TierModel.Solution, TierModel.Namespace));
            dalService.AppendLine("{");
            dalService.AppendLine(String.Format("\tpublic partial class {0}Dal : I{0}Dal", ServiceName));
            dalService.AppendLine("\t{");
            dalService.AppendLine();

            // public constructor
            dalService.AppendLine(String.Format("\t\tpublic {0}Dal()", ServiceName));
            dalService.AppendLine("\t\t{");
            dalService.AppendLine("\t\t}");
            dalService.AppendLine();
        }
        private void GenerateDalServiceConstant_TG(StringBuilder dalService)
        {
            dalService.AppendLine("\t\t#region Sql queries constants");
            dalService.AppendLine();

            GenerateInfoDalServiceConstant_TG(dalService);
            GenerateUdfDalServiceConstant_TG(dalService);

            dalService.AppendLine("\t\t#endregion");
            dalService.AppendLine();
        }
        private void GenerateInfoDalService_TG(StringBuilder dalService)
        {
            foreach (ItemInfo item in TierModel.ItemInfoList)
            {
                #region base select by key field method
                if (item.SelectMethod.NeedToCreate && item.SelectMethod.DalAccess)
                {
                    string selectByKeyFieldConstant = ServiceBuilderHelper.GetSelectDalQueryConstantName(item.ClassName, item.KeyColumn.CSharpColumn.Name);

                    // Get Model instance from database by key field
                    dalService.AppendLine(String.Format("\t\tpublic {0}Model Get{0}By{1}(ISession session, {2} {3})", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), CSharpTypeHelper.GetCSharpTypeName(item.KeyColumn.CSharpColumn), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                    dalService.AppendLine("\t\t{");
                    dalService.AppendLine(String.Format("\t\t\tSqlParameter prm = SqlHelperParameterCacheMy.GetSpParameter({0});", selectByKeyFieldConstant));
                    dalService.AppendLine("\t\t\tif (prm == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprm = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(item.KeyColumn.DbColumn.Type), item.KeyColumn.DbColumn.Length));
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameter({0}, prm);", selectByKeyFieldConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();
                    dalService.AppendLine(String.Format("\t\t\tprm.Value = {0};", ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                    dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prm);", selectByKeyFieldConstant));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tif (reader.HasRows)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\treturn Get{0}ModelFromDataReader(reader, true);", ServiceBuilderHelper.Capitalize(item.ClassName)));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t\telse");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine("\t\t\t\treturn null;");
                    //dalService.AppendLine("\t\t\t\tthrow new ObjectNotFoundException(\"\");");
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t}");
                    dalService.AppendLine();
                }
                #endregion

                #region base select blob by key field methods
                if (item.HasBlob)
                {
                    foreach (ColumnInfo column in item.ColumnList)
                    {
                        if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
                        {
                            string selectBlobByKeyFieldConstant = ServiceBuilderHelper.GetSelectOneColumnDalQueryConstantName(item.ClassName, column.DbColumn.Name, item.KeyColumn.CSharpColumn.Name);

                            // Get Model instance from database by key field
                            dalService.AppendLine(String.Format("\t\tpublic byte[] Get{0}{1}By{2}(ISession session, {3} {4})", item.ClassName, column.CSharpColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), CSharpTypeHelper.GetCSharpTypeName(item.KeyColumn.CSharpColumn), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                            dalService.AppendLine("\t\t{");
                            dalService.AppendLine(String.Format("\t\t\tSqlParameter prm = SqlHelperParameterCacheMy.GetSpParameter({0});", selectBlobByKeyFieldConstant));
                            dalService.AppendLine("\t\t\tif (prm == null)");
                            dalService.AppendLine("\t\t\t{");

                            dalService.AppendLine(GetDeclareSingleParameterFromModel("prm", item.KeyColumn));
                            //dalService.AppendLine(String.Format("\t\t\t\tprm = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(item.KeyColumn.DbColumn.Type), item.KeyColumn.DbColumn.Length));

                            dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameter({0}, prm);", selectBlobByKeyFieldConstant));
                            dalService.AppendLine("\t\t\t}");
                            dalService.AppendLine();
                            dalService.AppendLine(String.Format("\t\t\tprm.Value = {0};", ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                            dalService.AppendLine();
                            dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                            dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prm);", selectBlobByKeyFieldConstant));
                            dalService.AppendLine();
                            dalService.AppendLine("\t\t\tif (reader.HasRows)");
                            dalService.AppendLine("\t\t\t{");
                            dalService.AppendLine("\t\t\t\treader.Read();");
                            dalService.AppendLine(String.Format("\t\t\t\treturn DataConvertHelper.GetBinaryValue(reader[\"{0}\"]{1});", column.DbColumn.Name, column.CSharpColumn.IsGZipped ? ", true" : ""));
                            dalService.AppendLine("\t\t\t}");
                            dalService.AppendLine("\t\t\telse");
                            dalService.AppendLine("\t\t\t{");
                            dalService.AppendLine("\t\t\t\treader.Close();");
                            dalService.AppendLine("\t\t\t\treturn null;");
                            //dalService.AppendLine("\t\t\t\treturn new byte[] {};");
                            dalService.AppendLine("\t\t\t}");
                            dalService.AppendLine("\t\t}");
                            dalService.AppendLine();
                        }
                    }
                }
                #endregion base select blob by key methods

                #region base delete method

                if (item.DeleteMethod.NeedToCreate && item.DeleteMethod.DalAccess)
                {
                    string deleteByKeyFieldConstant = ServiceBuilderHelper.GetDeleteDalQueryConstantName(item.ClassName, item.KeyColumn.CSharpColumn.Name);

                    dalService.AppendLine(String.Format("\t\tpublic void Delete{0}By{1}(ISession session, {2} {3})", item.ClassName, ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), CSharpTypeHelper.GetCSharpTypeName(item.KeyColumn.CSharpColumn), ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                    dalService.AppendLine("\t\t{");
                    dalService.AppendLine(String.Format("\t\t\tSqlParameter prm = SqlHelperParameterCacheMy.GetSpParameter({0});", deleteByKeyFieldConstant));
                    dalService.AppendLine("\t\t\tif (prm == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprm = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(item.KeyColumn.DbColumn.Type), item.KeyColumn.DbColumn.Length));
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameter({0}, prm);", deleteByKeyFieldConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();
                    dalService.AppendLine(String.Format("\t\t\tprm.Value = {0};", ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                    dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prm);", deleteByKeyFieldConstant));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tif (reader.Read())");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\tint error = DataConvertHelper.GetInt32Value(reader[0]);");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\t\tif (error != 0)");
                    dalService.AppendLine("\t\t\t\t{");
                    dalService.AppendLine("\t\t\t\t  throw new SqlDalException(String.Concat(\"MS SQL Server error code = \", error.ToString()));");
                    dalService.AppendLine("\t\t\t\t}");
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t\telse");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t}");
                    dalService.AppendLine();
                }

                #endregion

                #region base insert method

                if (item.InsertMethod.NeedToCreate && item.InsertMethod.DalAccess)
                {
                    int index = 0;
                    string insertConstant = ServiceBuilderHelper.GetInsertDalQueryConstantName(item.ClassName);

                    if (MsSqlColumnTypeEnum.UNIQUEIDENTIFIER == (MsSqlColumnTypeEnum)item.KeyColumn.DbColumn.Type.Type)
                    {
                        #region key column - uniqueidentifier

                        int paramsCount = item.KeyColumn.NeedToGenerate ? item.UpdatebleCoulumnsCount - 1 : item.UpdatebleCoulumnsCount;

                        dalService.AppendLine(String.Format("\t\tpublic void Insert{0}(ISession session, {0}Model _{1})", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
                        dalService.AppendLine("\t\t{");
                        dalService.AppendLine(String.Format("\t\t\tSqlParameter[] prms = SqlHelperParameterCacheMy.GetSpParameterSet({0});", insertConstant));
                        dalService.AppendLine("\t\t\tif (prms == null)");
                        dalService.AppendLine("\t\t\t{");
                        dalService.AppendLine(String.Format("\t\t\t\tprms = new SqlParameter[{0}];", paramsCount.ToString()));
                        if (!item.KeyColumn.NeedToGenerate)
                        {
                            // set key value
                            dalService.AppendLine(this.GetDeclareMiltipleParameterFromModel("prms", item.KeyColumn, index));
                            //dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(item.KeyColumn.DbColumn.Type), item.KeyColumn.DbColumn.Length));
                            index = 1;
                        }
                        foreach (ColumnInfo column in item.ColumnList)
                        {
                            if (!column.IsPrimaryKey && !column.IsReadOnly)
                            {
                                dalService.AppendLine(this.GetDeclareMiltipleParameterFromModel("prms", column, index));
                                index++;
                            }
                        }
                        dalService.AppendLine();
                        dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameterSet({0}, prms);", insertConstant));
                        dalService.AppendLine("\t\t\t}");
                        dalService.AppendLine();

                        index = 0;
                        if (!item.KeyColumn.NeedToGenerate)
                        {
                            // set key value
                            dalService.AppendLine(GetFillParameterSetFromModel(index, item.ClassName, item.KeyColumn));
                            index = 1;
                        }
                        foreach (ColumnInfo column in item.ColumnList)
                        {
                            if (!column.IsPrimaryKey && !column.IsReadOnly)
                            {
                                dalService.AppendLine(GetFillParameterSetFromModel(index, item.ClassName, column));
                                index++;
                            }
                        }

                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prms);", insertConstant));
                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\tif (reader.Read())");
                        dalService.AppendLine("\t\t\t{");

                        string readerProperty = "reader[0]";
                        dalService.AppendLine(String.Format("\t\t\t\t_{0}.{1} = {2};", ServiceBuilderHelper.Decapitalize(item.ClassName), ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), MsSqlColumnHelper.GetMsSqlValue(item.KeyColumn, readerProperty)));
                        dalService.AppendLine("\t\t\t\tint error = DataConvertHelper.GetInt32Value(reader[1]);");
                        dalService.AppendLine("\t\t\t\treader.Close();");
                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\t\tif (error != 0)");
                        dalService.AppendLine("\t\t\t\t{");
                        dalService.AppendLine("\t\t\t\t\tthrow new SqlDalException(String.Concat(\"MS SQL Server error code = \", error.ToString()));");
                        dalService.AppendLine("\t\t\t\t}");
                        dalService.AppendLine("\t\t\t}");
                        dalService.AppendLine("\t\t\telse");
                        dalService.AppendLine("\t\t\t{");
                        dalService.AppendLine("\t\t\t\treader.Close();");
                        dalService.AppendLine("\t\t\t}");
                        dalService.AppendLine("\t\t}");
                        dalService.AppendLine();

                        #endregion key column - uniqueidentifier
                    }
                    else
                    {
                        #region key column - another db type

                        dalService.AppendLine(String.Format("\t\tpublic void Insert{0}(ISession session, {0}Model _{1})", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
                        dalService.AppendLine("\t\t{");
                        dalService.AppendLine(String.Format("\t\t\tSqlParameter[] prms = SqlHelperParameterCacheMy.GetSpParameterSet({0});", insertConstant));
                        dalService.AppendLine("\t\t\tif (prms == null)");
                        dalService.AppendLine("\t\t\t{");
                        dalService.AppendLine(String.Format("\t\t\t\tprms = new SqlParameter[{0}];", (item.UpdatebleCoulumnsCount - 1).ToString()));

                        dalService.AppendLine(this.GetDeclareMiltipleParameterFromModel("prms", item.KeyColumn, index));
                        //dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(item.KeyColumn.DbColumn.Type), item.KeyColumn.DbColumn.Length));
                        index += 1;
                        foreach (ColumnInfo column in item.ColumnList)
                        {
                            if (!column.IsPrimaryKey && !column.IsReadOnly)
                            {
                                dalService.AppendLine(this.GetDeclareMiltipleParameterFromModel("prms", column, index));
                                //dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(column.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type), column.DbColumn.Length));
                                index++;
                            }
                        }
                        dalService.AppendLine();
                        dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameterSet({0}, prms);", insertConstant));
                        dalService.AppendLine("\t\t\t}");
                        dalService.AppendLine();

                        index = 0;
                        dalService.AppendLine(GetFillParameterSetFromModel(index, item.ClassName, item.KeyColumn));
                        index += 1;
                        foreach (ColumnInfo column in item.ColumnList)
                        {
                            if (!column.IsPrimaryKey && !column.IsReadOnly)
                            {
                                dalService.AppendLine(GetFillParameterSetFromModel(index, item.ClassName, column));
                                index++;
                            }
                        }

                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prms);", insertConstant));
                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\tif (reader.Read())");
                        dalService.AppendLine("\t\t\t{");

                        //string readerProperty = "reader[0]";
                        //dalService.AppendLine(String.Format("\t\t\t\t_{0}.{1} = {2};", ServiceBuilderHelper.Decapitalize(item.ClassName), ServiceBuilderHelper.Capitalize(item.KeyColumn.CSharpColumn.Name), MsSqlColumnHelper.GetMsSqlValue(item.KeyColumn.DbColumn.Type, readerProperty)));
                        dalService.AppendLine("\t\t\t\tint error = DataConvertHelper.GetInt32Value(reader[0]);");
                        dalService.AppendLine("\t\t\t\treader.Close();");
                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\t\tif (error != 0)");
                        dalService.AppendLine("\t\t\t\t{");
                        dalService.AppendLine("\t\t\t\t\tthrow new SqlDalException(String.Concat(\"MS SQL Server error code = \", error.ToString()));");
                        dalService.AppendLine("\t\t\t\t}");
                        dalService.AppendLine("\t\t\t}");
                        dalService.AppendLine("\t\t\telse");
                        dalService.AppendLine("\t\t\t{");
                        dalService.AppendLine("\t\t\t\treader.Close();");
                        dalService.AppendLine("\t\t\t}");
                        dalService.AppendLine("\t\t}");
                        dalService.AppendLine();

                        #endregion key column - another db type
                    }
                }

                #endregion

                #region base update method

                if (item.UpdateMethod.NeedToCreate && item.UpdateMethod.DalAccess)
                {
                    int index = 1;
                    string updateConstant = ServiceBuilderHelper.GetUpdateDalQueryConstantName(item.ClassName);

                    dalService.AppendLine(String.Format("\t\tpublic void Update{0}(ISession session, {0}Model _{1})", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
                    dalService.AppendLine("\t\t{");
                    dalService.AppendLine(String.Format("\t\t\tSqlParameter[] prms = SqlHelperParameterCacheMy.GetSpParameterSet({0});", updateConstant));
                    dalService.AppendLine("\t\t\tif (prms == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprms = new SqlParameter[{0}];", item.UpdatebleCoulumnsCount.ToString()));

                    dalService.AppendLine(this.GetDeclareMiltipleParameterFromModel("prms", item.KeyColumn, 0));
                    //dalService.AppendLine(String.Format("\t\t\t\tprms[0] = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(item.KeyColumn.DbColumn.Type), item.KeyColumn.DbColumn.Length));

                    foreach (ColumnInfo column in item.ColumnList)
                    {
                        if (!column.IsPrimaryKey && !column.IsReadOnly)
                        {
                            dalService.AppendLine(this.GetDeclareMiltipleParameterFromModel("prms", column, index));
                            //dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(column.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type), column.DbColumn.Length));
                            index++;
                        }
                    }
                    dalService.AppendLine();
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameterSet({0}, prms);", updateConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();

                    index = 0;
                    dalService.AppendLine(GetFillParameterSetFromModel(index++, item.ClassName, item.KeyColumn));
                    foreach (ColumnInfo column in item.ColumnList)
                    {
                        if (!column.IsPrimaryKey && !column.IsReadOnly)
                        {
                            dalService.AppendLine(GetFillParameterSetFromModel(index, item.ClassName, column));
                            index++;
                        }
                    }

                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                    dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prms);", updateConstant));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tif (reader.Read())");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\tint error = DataConvertHelper.GetInt32Value(reader[0]);");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\t\tif (error != 0)");
                    dalService.AppendLine("\t\t\t\t{");
                    dalService.AppendLine("\t\t\t\t\tthrow new SqlDalException(String.Concat(\"MS SQL Server error code = \", error.ToString()));");
                    dalService.AppendLine("\t\t\t\t}");
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t\telse");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t}");
                    dalService.AppendLine();
                }

                #endregion

                #region fill model instance from SqlDataReader

                dalService.AppendLine(String.Format("\t\tinternal static {0}Model Get{0}ModelFromDataReader(SqlDataReader reader, bool needReaderClose)", item.ClassName));
                dalService.AppendLine("\t\t{");
                dalService.AppendLine(String.Format("\t\t\t{0}Model _{1} = null;", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
                dalService.AppendLine();
                dalService.AppendLine("\t\t\tif (!reader.IsClosed)");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine("\t\t\t\treader.Read();");
                dalService.AppendLine();
                dalService.AppendLine(String.Format("\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(item.ClassName)), item.KeyColumn)));
                foreach (ColumnInfo column in item.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.AppendLine(String.Format("\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(item.ClassName)), column)));
                    }
                }
                dalService.AppendLine();
                dalService.Append(String.Format("\t\t\t\t_{1} = new {0}Model(", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
                dalService.Append(String.Format("_{0}", ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                foreach (ColumnInfo column in item.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.Append(String.Format(", _{0}", ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name)));
                    }
                    else if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
                    {
                        dalService.Append(", null");
                    }
                }
                dalService.AppendLine(");");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\tif (needReaderClose)");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\treader.Close();");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine("\t\t\telse");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine(String.Format("\t\t\t\t_{1} = new {0}Model();", item.ClassName, ServiceBuilderHelper.Decapitalize(item.ClassName)));
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine(String.Format("\t\t\treturn _{0};", ServiceBuilderHelper.Decapitalize(item.ClassName)));
                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion

                #region fill info model list from SqlDataReader

                dalService.AppendLine(String.Format("\t\tinternal static IList<{0}Model> Get{0}ModelListFromDataReader(SqlDataReader reader, bool needReaderClose)", item.ClassName));
                dalService.AppendLine("\t\t{");
                dalService.AppendLine(String.Format("\t\t\tIList<{0}Model> list = new List<{0}Model>();", item.ClassName));
                dalService.AppendLine();
                dalService.AppendLine("\t\t\tif (!reader.IsClosed)");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine("\t\t\t\twhile (reader.Read())");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine(String.Format("\t\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(item.ClassName)), item.KeyColumn)));
                foreach (ColumnInfo column in item.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.AppendLine(String.Format("\t\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(item.ClassName)), column)));
                    }
                }
                dalService.AppendLine();
                dalService.Append(String.Format("\t\t\t\t\t{0}Model item = new {0}Model(", item.ClassName));
                dalService.Append(String.Format("_{0}", ServiceBuilderHelper.Decapitalize(item.KeyColumn.CSharpColumn.Name)));
                foreach (ColumnInfo column in item.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.Append(String.Format(", _{0}", ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name)));
                    }
                    else if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
                    {
                        dalService.Append(", null");
                    }
                }
                dalService.AppendLine(");");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\t\tlist.Add(item);");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\tif (needReaderClose)");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\treader.Close();");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\treturn list;");
                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion
            }

            foreach (ListItem list in TierModel.ListItemList)
            {
                #region fill list model list from SqlDataReader

                dalService.AppendLine(String.Format("\t\tinternal static IList<{0}Model> Get{0}ModelFromDataReader(SqlDataReader reader, bool needReaderClose)", list.ClassName));
                dalService.AppendLine("\t\t{");
                dalService.AppendLine(String.Format("\t\t\tIList<{0}Model> list = new List<{0}Model>();", list.ClassName));
                dalService.AppendLine();
                dalService.AppendLine("\t\t\tif (!reader.IsClosed)");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine("\t\t\t\twhile (reader.Read())");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine(String.Format("\t\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(list.ClassName)), list.KeyColumn)));
                foreach (ColumnInfo column in list.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.AppendLine(String.Format("\t\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(list.ClassName)), column)));
                    }
                }
                dalService.AppendLine();
                dalService.Append(String.Format("\t\t\t\t\t{0}Model item = new {0}Model(", list.ClassName));
                dalService.Append(String.Format("_{0}", ServiceBuilderHelper.Decapitalize(list.KeyColumn.CSharpColumn.Name)));
                foreach (ColumnInfo column in list.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.Append(String.Format(", _{0}", ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name)));
                    }
                    else if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
                    {
                        dalService.Append(", null");
                    }
                }
                dalService.AppendLine(");");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\t\tlist.Add(item);");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\tif (needReaderClose)");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\treader.Close();");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\treturn list;");
                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion

                #region fill list page from SqlDataReader

                dalService.AppendLine(String.Format("\t\tinternal static ListPage Get{0}ListPage(SqlDataReader reader, ListQuery query)", list.ClassName));
                dalService.AppendLine("\t\t{");
                dalService.AppendLine("\t\t\tListPage page = new ListPage();");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\tif (!reader.IsClosed)");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine("\t\t\t\tif (reader.Read())");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\tpage.TotalRowCount = DataConvertHelper.GetInt32Value(reader[0]);");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine("\t\t\t\telse");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\tthrow new SqlDalException(\" Sql Exception \");");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\treader.NextResult();");
                dalService.AppendLine("\t\t\t\twhile (reader.Read())");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine(String.Format("\t\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(list.ClassName)), list.KeyColumn)));
                foreach (ColumnInfo column in list.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.AppendLine(String.Format("\t\t\t\t\t{0}", GetFillInstanceConstructorFromDataReader(String.Concat("_", ServiceBuilderHelper.Decapitalize(list.ClassName)), column)));
                    }
                }
                dalService.AppendLine();
                dalService.Append(String.Format("\t\t\t\t\t{0}Model row = new {0}Model(", list.ClassName));
                dalService.Append(String.Format("_{0}", ServiceBuilderHelper.Decapitalize(list.KeyColumn.CSharpColumn.Name)));
                foreach (ColumnInfo column in list.ColumnList)
                {
                    if (!column.IsPrimaryKey &&
                       (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                    {
                        dalService.Append(String.Format(", _{0}", ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name)));
                    }
                    else if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
                    {
                        dalService.Append(", null");
                    }
                }
                dalService.AppendLine(");");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\t\tpage.AddRow(row);");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\treader.Close();");
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\treturn page;");
                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion
            }
        }
        private void GenerateDalServiceFooter_TG(StringBuilder dalService)
        {
            // closing patterns for class and namespace declarations
            dalService.AppendLine("\t}");
            dalService.AppendLine("}");
        }

        private StringBuilder GenerateEmptyDalText()
        {
            StringBuilder dalService = new StringBuilder(2000);

            dalService.AppendLine("using System;");
            dalService.AppendLine("using System.Text;");
            dalService.AppendLine("using System.Data;");
            dalService.AppendLine("using System.Data.Common;");
            dalService.AppendLine("using System.Data.SqlClient;");
            dalService.AppendLine("using System.Collections.Generic;");
            dalService.AppendLine();
            dalService.AppendLine(String.Format("using {0}.Common.Data;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.Common.Exception;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.Model.{1};", TierModel.Solution, TierModel.Namespace));
            dalService.AppendLine(String.Format("using {0}.MsSqlDal.Util;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.IDal;", TierModel.Solution));
            dalService.AppendLine(String.Format("using {0}.IDal.{1};", TierModel.Solution, TierModel.Namespace));
            dalService.AppendLine(String.Format("using {0}.Common.Util;", TierModel.Solution));
            dalService.AppendLine();

            // namespace and class declaration
            dalService.AppendLine(String.Format("namespace {0}.MsSqlDal.{1}", TierModel.Solution, TierModel.Namespace));
            dalService.AppendLine("{");
            dalService.AppendLine(String.Format("\tpublic partial class {0}Dal : I{0}Dal", ServiceName));
            dalService.AppendLine("\t{");
            dalService.AppendLine();

            // closing patterns for class and namespace declarations
            dalService.AppendLine("\t}");
            dalService.AppendLine("}");

            return dalService;
        }
        private void GenerateInfoDalServiceConstant_TG(StringBuilder dalService)
        {
            foreach (ItemInfo item in TierModel.ItemInfoList)
            {
                #region base select method
                if (item.SelectMethod.NeedToCreate && item.SelectMethod.DalAccess)
                {
                    string selectFrom = !String.IsNullOrEmpty(item.DbViewName) ? item.DbViewName : item.DbTableName;
                    string selectByKeyFieldConstant = ServiceBuilderHelper.GetSelectDalQueryConstantName(item.ClassName, item.KeyColumn.CSharpColumn.Name);

                    StringBuilder columnsToSelect = new StringBuilder(500);
                    foreach (ColumnInfo column in item.ColumnList)
                    {
                        if (!column.IsBlob ||
                           (!column.IsBlob || (column.IsBlob && !column.CSharpColumn.NeedSeparateLoad)))
                        {
                            if (columnsToSelect.Length > 0)
                            {
                                columnsToSelect.Append(", ");
                            }
                            columnsToSelect.Append(column.DbColumn.Name);
                        }
                    }

                    dalService.AppendLine(String.Format("\t\tprivate const string {0} =", selectByKeyFieldConstant));
                    dalService.AppendLine(String.Format("\t\t\t@\"SELECT {0} FROM [{1}] WHERE {2} = @{3}\";", columnsToSelect.ToString(), selectFrom, item.KeyColumn.DbColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name)));
                    dalService.AppendLine();
                }
                #endregion base select method

                #region generate own select method for each blob field in a table
                if (item.HasBlob)
                {
                    foreach (ColumnInfo column in item.ColumnList)
                    {
                        if (column.IsBlob && column.CSharpColumn.NeedSeparateLoad)
                        {
                            string selectBlobByKeyFieldConstant = ServiceBuilderHelper.GetSelectOneColumnDalQueryConstantName(item.ClassName, column.DbColumn.Name, item.KeyColumn.CSharpColumn.Name);

                            dalService.AppendLine(String.Format("\t\tprivate const string {0} =", selectBlobByKeyFieldConstant));
                            dalService.AppendLine(String.Format("\t\t\t@\"SELECT {0} FROM [{1}] WHERE {2} = @{3}\";", column.DbColumn.Name, item.DbTableName, item.KeyColumn.DbColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name)));
                            dalService.AppendLine();
                        }
                    }
                }
                #endregion generate own select method for each blob field in a table

                #region base insert method
                if (item.InsertMethod.NeedToCreate && item.InsertMethod.DalAccess)
                {
                    string insertConstant = ServiceBuilderHelper.GetInsertDalQueryConstantName(item.ClassName);
                    string tableFields = GetTableFields(item.ColumnList);
                    string tableValues = GetTableValues(item.ColumnList);

                    if ((MsSqlColumnTypeEnum)item.KeyColumn.DbColumn.Type.Type == MsSqlColumnTypeEnum.UNIQUEIDENTIFIER)
                    {
                        if (item.KeyColumn.NeedToGenerate)
                        {
                            dalService.AppendLine(String.Format("\t\tprivate const string {0} =", insertConstant));
                            dalService.AppendLine(String.Format("\t\t\t@\"DECLARE @{0} UNIQUEIDENTIFIER; SET @{0} = NEWID(); INSERT INTO [{1}]({2}) VALUES ({3}); SELECT @{0}, @@ERROR;\";", item.KeyColumn.DbColumn.Name, item.DbTableName, tableFields, tableValues));
                        }
                        else
                        {
                            dalService.AppendLine(String.Format("\t\tprivate const string {0} =", insertConstant));
                            dalService.AppendLine(String.Format("\t\t\t@\"INSERT INTO [{1}]({2}) VALUES ({3}); SELECT @{0}, @@ERROR;\";", item.KeyColumn.DbColumn.Name, item.DbTableName, tableFields, tableValues));
                        }
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\tprivate const string {0} =", insertConstant));
                        dalService.AppendLine(String.Format("\t\t\t@\"INSERT INTO [{0}]({1}) VALUES ({2}); SELECT @@ERROR;\";", item.DbTableName, tableFields, tableValues));
                    }
                    dalService.AppendLine();
                }
                #endregion base insert method

                #region base update method
                if (item.UpdateMethod.NeedToCreate && item.UpdateMethod.DalAccess)
                {
                    string updateConstant = ServiceBuilderHelper.GetUpdateDalQueryConstantName(item.ClassName);
                    string tableFieldValuePairs = GetTableFieldValuePairs(item.ColumnList);

                    dalService.AppendLine(String.Format("\t\tprivate const string {0} =", updateConstant));
                    dalService.AppendLine(String.Format("\t\t\t@\"UPDATE [{0}] SET {1} WHERE {2} = @{3}; SELECT @@ERROR\";", item.DbTableName, tableFieldValuePairs, item.KeyColumn.DbColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name)));
                    dalService.AppendLine();
                }
                #endregion base update method

                #region base delete method
                if (item.DeleteMethod.NeedToCreate && item.DeleteMethod.DalAccess)
                {
                    string deleteByKeyFieldConstant = ServiceBuilderHelper.GetDeleteDalQueryConstantName(item.ClassName, item.KeyColumn.CSharpColumn.Name);

                    dalService.AppendLine(String.Format("\t\tprivate const string {0} =", deleteByKeyFieldConstant));
                    dalService.AppendLine(String.Format("\t\t\t@\"DELETE FROM [{0}] WHERE {1} = @{2}; SELECT @@ERROR;\";", item.DbTableName, item.KeyColumn.DbColumn.Name, ServiceBuilderHelper.Capitalize(item.KeyColumn.DbColumn.Name)));
                    dalService.AppendLine();
                }
                #endregion base delete method
            }
        }
        private void GenerateUdfDalServiceConstant_TG(StringBuilder dalService)
        {
            foreach (UdfInfo udf in TierModel.SelectMethodList)
            {
                if (!udf.DalAccess)
                {
                    continue;
                }

                string selectUdfSqlConstant = ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name);

                dalService.AppendLine(String.Format("\t\tprivate const string {0} =", selectUdfSqlConstant));
                dalService.AppendLine(String.Format("\t\t\t@\"{0}\";", udf.SqlQuery));
                dalService.AppendLine();
            }
            foreach (UdfInfo udf in TierModel.UpdateMethodList)
            {
                if (!udf.DalAccess)
                {
                    continue;
                }

                string selectUdfSqlConstant = ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name);

                dalService.AppendLine(String.Format("\t\tprivate const string {0} =", selectUdfSqlConstant));
                dalService.AppendLine(String.Format("\t\t\t@\"{0}; SELECT @@ERROR;\";", udf.SqlQuery));
                dalService.AppendLine();
            }
            foreach (UdfInfo udf in TierModel.DeleteMethodList)
            {
                if (!udf.DalAccess)
                {
                    continue;
                }

                string selectUdfSqlConstant = ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name);

                dalService.AppendLine(String.Format("\t\tprivate const string {0} =", selectUdfSqlConstant));
                dalService.AppendLine(String.Format("\t\t\t@\"{0}; SELECT @@ERROR;\";", udf.SqlQuery));
                dalService.AppendLine();
            }
        }
        private void GenerateSelectUdfDalService_TG(StringBuilder dalService)
        {
            foreach (UdfInfo udf in TierModel.SelectMethodList)
            {
                if (!udf.DalAccess)
                {
                    continue;
                }

                string selectUdfConstant = ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name);

                #region Declaration Section

                if (!String.IsNullOrEmpty(udf.Comment))
                {
                    dalService.AppendLine(String.Format("\t\t// {0}", udf.Comment));
                }

                if (!CSharpTypeHelper.IsSimpleType(udf.ReturnType))
                {
                    switch (udf.ReturnType)
                    {
                        case CSharpTypeEnum.ILIST:
                            dalService.AppendLine(String.Format("\t\tpublic IList<{0}> {1}(ISession session{2})", CSharpTypeHelper.GetCSharpTypeName(udf.Type), udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                            break;
                        case CSharpTypeEnum.LIST_PAGE:
                            dalService.AppendLine(String.Format("\t\tpublic ListPage {0}(ISession session, ListQuery query{1})", udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                            break;
                        case CSharpTypeEnum.ITEM_INFO:
                        case CSharpTypeEnum.LIST_ITEM:
                            dalService.AppendLine(String.Format("\t\tpublic {0}Model {1}(ISession session{2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                            break;
                        case CSharpTypeEnum.UNDEFINED:
                            if (!String.IsNullOrEmpty(udf.Type))
                            {
                                dalService.AppendLine(String.Format("\t\tpublic {0}Model {1}(ISession session{2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                            }
                            break;
                    }
                }
                else
                {
                    if (udf.ReturnType == CSharpTypeEnum.ENUM)
                    {
                        dalService.AppendLine(String.Format("\t\tpublic {0} {1}(ISession session{2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                    }
                    else if (udf.ReturnType != CSharpTypeEnum.UNDEFINED)
                    {
                        dalService.AppendLine(String.Format("\t\tpublic {0} {1}(ISession session{2})", CSharpTypeHelper.GetCSharpTypeName(udf.ReturnType), udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\tpublic {0}Model {1}(ISession session{2})", udf.Type, udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                    }
                }
                dalService.AppendLine("\t\t{");

                #endregion

                #region Fill Parameter(s) Section

                if (udf.ColumnList.Count == 1)
                {
                    #region single additional parameter

                    dalService.AppendLine(String.Format("\t\t\tSqlParameter prm = SqlHelperParameterCacheMy.GetSpParameter({0});", selectUdfConstant));
                    dalService.AppendLine("\t\t\tif (prm == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprm = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(udf.ColumnList[0].DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(udf.ColumnList[0].DbColumn.Type), udf.ColumnList[0].DbColumn.Length));
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameter({0}, prm);", selectUdfConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();
                    dalService.AppendLine(GetFillParameterFromModel(udf.ColumnList[0]));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        ListItem listItem = TierModel.GetListItemByName(udf.Type);
                        dalService.AppendLine(String.Format("\t\t\tstring sqlQuery = ListQueryHelper.GetListQuerySqlStatement(query, \"{0}\", {1});", listItem.KeyColumn.DbColumn.Name, ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name)));
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlQuery, prm);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prm);", selectUdfConstant));
                    }

                    #endregion
                }
                else if (udf.ColumnList.Count > 1)
                {
                    #region an array of additional parameters
                    int index = 0;
                    dalService.AppendLine(String.Format("\t\t\tSqlParameter[] prms = SqlHelperParameterCacheMy.GetSpParameterSet({0});", selectUdfConstant));
                    dalService.AppendLine("\t\t\tif (prms == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprms = new SqlParameter[{0}];", udf.ColumnList.Count));
                    foreach (ColumnInfo column in udf.ColumnList)
                    {
                        dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(column.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type), column.DbColumn.Length));
                        index++;
                    }
                    dalService.AppendLine();
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameterSet({0}, prms);", selectUdfConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();

                    index = 0;
                    foreach (ColumnInfo column in udf.ColumnList)
                    {
                        dalService.AppendLine(GetFillParameterSetFromModel(index, column));
                        index++;
                    }

                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");

                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        ListItem listItem = TierModel.GetListItemByName(udf.Type);
                        dalService.AppendLine(String.Format("\t\t\tstring sqlQuery = ListQueryHelper.GetListQuerySqlStatement(query, \"{0}\", {1});", listItem.KeyColumn.DbColumn.Name, ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name)));
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlQuery, prms);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prms);", selectUdfConstant));
                    }
                    #endregion
                }
                else if (udf.ColumnList.Count == 0)
                {
                    #region no additional parameters

                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");

                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        ListItem listItem = TierModel.GetListItemByName(udf.Type);
                        dalService.AppendLine(String.Format("\t\t\tstring sqlQuery = ListQueryHelper.GetListQuerySqlStatement(query, \"{0}\", {1});", listItem.KeyColumn.DbColumn.Name, ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name)));
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlQuery);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0});", selectUdfConstant));
                    }

                    #endregion
                }

                #endregion

                #region Return Section

                if (udf.ReturnType == CSharpTypeEnum.ILIST)
                {
                    #region List of info model or ListItem model
                    ItemAttributes typeAttributes = this.TierModel.GetDeclaredTypeAttributes(udf.Type);
                    if (typeAttributes.IsLocal)
                    {
                        if (typeAttributes.IsItemInfo)
                        {
                            dalService.AppendLine(String.Format("\t\t\treturn Get{0}ModelListFromDataReader(reader, true);", udf.Type));
                        }
                        else if (typeAttributes.IsListItem)
                        {
                            dalService.AppendLine(String.Format("\t\t\treturn Get{0}ModelFromDataReader(reader, true);", udf.Type));
                        }
                        else if (CSharpTypeHelper.IsSimpleType(CSharpTypeHelper.GetCSharpTypeEnum(udf.Type)))
                        {
                            dalService.AppendLine(String.Format("\t\t\treturn DalUtil.GetListFromDataReader<{0}>(reader, true);", udf.Type));
                        }
                    }
                    else
                    {
                        if (typeAttributes.IsItemInfo)
                        {
                            dalService.AppendLine(String.Format("\t\t\treturn {0}ServiceDal.Get{1}ModelListFromDataReader(reader, true);", typeAttributes.IncludeServiceName, udf.Type));
                        }
                        //else
                        //{
                        //    dalService.AppendLine(String.Format("\t\t\treturn {0}ServiceDal.Get{1}ModelFromDataReader(reader, true);", includedServiceName, udf.Type));
                        //}
                    }
                    #endregion
                }
                else if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                {
                    #region ListPage

                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tif (reader.HasRows)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\treturn Get{0}ListPage(reader, query);", udf.Type));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t\telse");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine("\t\t\t\treturn null;");
                    dalService.AppendLine("\t\t\t}");

                    #endregion
                }
                else
                {
                    #region single return value

                    string readerProperty = "reader[0]";

                    if (udf.ReturnType == CSharpTypeEnum.ENUM)
                    {
                        #region return type - enum
                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\tif (reader.Read())");
                        dalService.AppendLine("\t\t\t{");
                        dalService.AppendLine(String.Format("\t\t\t\t{0} val = ({0})DataConvertHelper.GetEnumValue(typeof({0}), reader[0]);", udf.Type));
                        //_sectionInfo.ForumType = (ForumTypeEnum)DataConvertHelper.GetEnumValue(typeof(ForumTypeEnum), reader["ForumType"]);
                        //dalService.AppendLine(String.Format("\t\t\t\t{0} val = reader[0] != DBNull.Value ? {1} : {2};", udf.Type, MsSqlColumnHelper.GetMsSqlValue(msSqlColumnTypeEnum, readerProperty), CSharpTypeHelper.GetCSharpNull(udf.ReturnType)));
                        dalService.AppendLine("\t\t\t\treader.Close();");
                        dalService.AppendLine("\t\t\t\treturn val;");
                        #endregion return type - enum
                    }
                    else if (CSharpTypeHelper.IsSimpleType(udf.ReturnType))
                    {
                        MsSqlColumnTypeEnum msSqlColumnTypeEnum = MsSqlColumnHelper.GetMsSqlColumnTypeEnum(udf.ReturnType);

                        dalService.AppendLine();
                        dalService.AppendLine("\t\t\tif (reader.Read())");
                        dalService.AppendLine("\t\t\t{");
                        dalService.AppendLine(String.Format("\t\t\t\t{0} val = {1};", CSharpTypeHelper.GetCSharpTypeName(udf.ReturnType), MsSqlColumnHelper.GetMsSqlValue(udf.ReturnType, udf.Type, msSqlColumnTypeEnum, "reader[0]")));
                        dalService.AppendLine("\t\t\t\treader.Close();");
                        dalService.AppendLine("\t\t\t\treturn val;");
                    }
                    else
                    {
                        ItemAttributes typeAttributes = this.TierModel.GetDeclaredTypeAttributes(udf.Type);
                        if (typeAttributes.IsLocal)
                        {
                            if (typeAttributes.IsItemInfo)
                            {
                                dalService.AppendLine();
                                dalService.AppendLine("\t\t\tif (reader.HasRows)");
                                dalService.AppendLine("\t\t\t{");
                                dalService.AppendLine(String.Format("\t\t\t\treturn Get{0}ModelFromDataReader(reader, true);", udf.Type));
                            }
                        }
                        else
                        {
                            if (typeAttributes.IsItemInfo)
                            {
                                dalService.AppendLine();
                                dalService.AppendLine("\t\t\tif (reader.HasRows)");
                                dalService.AppendLine("\t\t\t{");
                                dalService.AppendLine(String.Format("\t\t\t\treturn {0}ServiceDal.Get{1}ModelFromDataReader(reader, true);", typeAttributes.IncludeServiceName, udf.Type));
                            }
                        }
                    }

                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine("\t\t\telse");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine("\t\t\t\treader.Close();");
                    dalService.AppendLine(String.Format("\t\t\t\treturn {0};", CSharpTypeHelper.GetCSharpNull(udf.ReturnType, udf.Type)));
                    dalService.AppendLine("\t\t\t}");

                    #endregion
                }

                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion
            }
        }
        private void GenerateUpdateUdfDalService_TG(StringBuilder dalService)
        {
            foreach (UdfInfo udf in TierModel.UpdateMethodList)
            {
                if (!udf.DalAccess)
                {
                    continue;
                }

                string updateUdfSqlConstant = ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name);

                dalService.AppendLine(String.Format("\t\tpublic void {0}(ISession session{1})", udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                dalService.AppendLine("\t\t{");

                #region Fill Parameter(s) Section

                if (udf.ColumnList.Count == 1)
                {
                    #region single additional parameter

                    dalService.AppendLine(String.Format("\t\t\tSqlParameter prm = SqlHelperParameterCacheMy.GetSpParameter({0});", updateUdfSqlConstant));
                    dalService.AppendLine("\t\t\tif (prm == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprm = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(udf.ColumnList[0].DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(udf.ColumnList[0].DbColumn.Type), udf.ColumnList[0].DbColumn.Length));
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameter({0}, prm);", updateUdfSqlConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();
                    dalService.AppendLine(GetFillParameterFromModel(udf.ColumnList[0]));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlSession.GetListCommandText(query), prm);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prm);", updateUdfSqlConstant));
                    }

                    #endregion
                }
                else if (udf.ColumnList.Count > 1)
                {
                    #region an array of additional parameters

                    int index = 0;
                    dalService.AppendLine(String.Format("\t\t\tSqlParameter[] prms = SqlHelperParameterCacheMy.GetSpParameterSet({0});", updateUdfSqlConstant));
                    dalService.AppendLine("\t\t\tif (prms == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprms = new SqlParameter[{0}];", udf.ColumnList.Count));
                    foreach (ColumnInfo column in udf.ColumnList)
                    {
                        dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(column.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type), column.DbColumn.Length));
                        index++;
                    }
                    dalService.AppendLine();
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameterSet({0}, prms);", updateUdfSqlConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();

                    index = 0;
                    foreach (ColumnInfo column in udf.ColumnList)
                    {
                        dalService.AppendLine(GetFillParameterSetFromModel(index, column));
                        index++;
                    }

                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");

                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlSession.GetListCommandText(query), prms);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prms);", updateUdfSqlConstant));
                    }

                    #endregion
                }
                else if (udf.ColumnList.Count == 0)
                {
                    #region no additional parameters

                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");

                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlSession.GetListCommandText(query));");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0});", updateUdfSqlConstant));
                    }

                    #endregion
                }

                #endregion

                #region Return Section

                dalService.AppendLine();
                dalService.AppendLine("\t\t\tif (reader.Read())");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine("\t\t\t\tint error = DataConvertHelper.GetInt32Value(reader[0]);");
                dalService.AppendLine("\t\t\t\treader.Close();");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\tif (error != 0)");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\tthrow new SqlDalException(String.Concat(\"MS SQL Server error code = \", error.ToString()));");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine("\t\t\treader.Close();");
                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion
            }
        }
        private void GenerateDeleteUdfDalService_TG(StringBuilder dalService)
        {
            foreach (UdfInfo udf in TierModel.DeleteMethodList)
            {
                if (!udf.DalAccess)
                {
                    continue;
                }

                string deleteUdfSqlConstant = ServiceBuilderHelper.GetMethodDalQueryConstantName(udf.Name);

                //dalService.AppendLine(String.Format("\t\t/// {0}", udf.Comment));
                dalService.AppendLine(String.Format("\t\tpublic void {0}(ISession session{1})", udf.Name, ServiceBuilderHelper.GetPropertyCSharpFields(udf, false)));
                dalService.AppendLine("\t\t{");

                #region Fill Parameter(s) Section

                if (udf.ColumnList.Count == 1)
                {
                    #region single additional parameter

                    dalService.AppendLine(String.Format("\t\t\tSqlParameter prm = SqlHelperParameterCacheMy.GetSpParameter({0});", deleteUdfSqlConstant));
                    dalService.AppendLine("\t\t\tif (prm == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprm = new SqlParameter(\"{0}\", SqlDbType.{1}, {2});", ServiceBuilderHelper.Capitalize(udf.ColumnList[0].DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(udf.ColumnList[0].DbColumn.Type), udf.ColumnList[0].DbColumn.Length));
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameter({0}, prm);", deleteUdfSqlConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();
                    dalService.AppendLine(GetFillParameterFromModel(udf.ColumnList[0]));
                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");
                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlSession.GetListCommandText(query), prm);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prm);", deleteUdfSqlConstant));
                    }

                    #endregion
                }
                else if (udf.ColumnList.Count > 1)
                {
                    #region an array of additional parameters

                    int index = 0;
                    dalService.AppendLine(String.Format("\t\t\tSqlParameter[] prms = SqlHelperParameterCacheMy.GetSpParameterSet({0});", deleteUdfSqlConstant));
                    dalService.AppendLine("\t\t\tif (prms == null)");
                    dalService.AppendLine("\t\t\t{");
                    dalService.AppendLine(String.Format("\t\t\t\tprms = new SqlParameter[{0}];", udf.ColumnList.Count));
                    foreach (ColumnInfo column in udf.ColumnList)
                    {
                        dalService.AppendLine(String.Format("\t\t\t\tprms[{0}] = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});", index.ToString(), ServiceBuilderHelper.Capitalize(column.DbColumn.Name), MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type), column.DbColumn.Length));
                        index++;
                    }
                    dalService.AppendLine();
                    dalService.AppendLine(String.Format("\t\t\t\tSqlHelperParameterCacheMy.CacheParameterSet({0}, prms);", deleteUdfSqlConstant));
                    dalService.AppendLine("\t\t\t}");
                    dalService.AppendLine();

                    index = 0;
                    foreach (ColumnInfo column in udf.ColumnList)
                    {
                        dalService.AppendLine(GetFillParameterSetFromModel(index, column));
                        index++;
                    }

                    dalService.AppendLine();
                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");

                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlSession.GetListCommandText(query), prms);");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0}, prms);", deleteUdfSqlConstant));
                    }

                    #endregion
                }
                else if (udf.ColumnList.Count == 0)
                {
                    #region no additional parameters

                    dalService.AppendLine("\t\t\tSession sqlSession = Session.GetSqlSession(session);");

                    if (udf.ReturnType == CSharpTypeEnum.LIST_PAGE)
                    {
                        dalService.AppendLine("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, sqlSession.GetListCommandText(query));");
                    }
                    else
                    {
                        dalService.AppendLine(String.Format("\t\t\tSqlDataReader reader = sqlSession.ExecuteReader(CommandType.Text, {0});", deleteUdfSqlConstant));
                    }

                    #endregion
                }

                #endregion

                #region Return Section

                dalService.AppendLine();
                dalService.AppendLine("\t\t\tif (reader.Read())");
                dalService.AppendLine("\t\t\t{");
                dalService.AppendLine("\t\t\t\tint error = DataConvertHelper.GetInt32Value(reader[0]);");
                dalService.AppendLine("\t\t\t\treader.Close();");
                dalService.AppendLine();
                dalService.AppendLine("\t\t\t\tif (error != 0)");
                dalService.AppendLine("\t\t\t\t{");
                dalService.AppendLine("\t\t\t\t\tthrow new SqlDalException(String.Concat(\"MS SQL Server error code = \", error.ToString()));");
                dalService.AppendLine("\t\t\t\t}");
                dalService.AppendLine("\t\t\t}");
                dalService.AppendLine("\t\t\treader.Close();");
                dalService.AppendLine("\t\t}");
                dalService.AppendLine();

                #endregion
            }
        }

        private string GetTableFields(IList<ColumnInfo> columnList)
        {
            StringBuilder result = new StringBuilder(500);
            foreach (ColumnInfo column in columnList)
            {
                if (column.IsReadOnly)
                {
                    continue;
                }

                if (result.Length > 0)
                {
                    result.Append(", ");
                }
                result.Append(column.DbColumn.Name);
            }

            return result.ToString();
        }
        private string GetTableValues(IList<ColumnInfo> columnList)
        {
            StringBuilder result = new StringBuilder(500);
            foreach (ColumnInfo column in columnList)
            {
                if (column.IsReadOnly)
                {
                    continue;
                }

                if (result.Length > 0)
                {
                    result.Append(", ");
                }
                result.Append(String.Concat("@", column.DbColumn.Name));
            }

            return result.ToString();
        }
        private string GetTableFieldValuePairs(IList<ColumnInfo> columnList)
        {
            StringBuilder result = new StringBuilder(500);
            foreach (ColumnInfo column in columnList)
            {
                if (column.IsReadOnly)
                {
                    continue;
                }
                if (result.Length > 0)
                {
                    result.Append(", ");
                }
                if (!column.IsBlob || (column.IsBlob && column.CSharpColumn.NeedSeparateLoad))
                {
                    result.Append(String.Format("{0}=@{1}", column.DbColumn.Name, ServiceBuilderHelper.Capitalize(column.DbColumn.Name)));
                }
                else
                {
                    result.Append(String.Format("{0}=ISNULL(@{1},{0})", column.DbColumn.Name, ServiceBuilderHelper.Capitalize(column.DbColumn.Name)));
                }
            }

            return result.ToString();
        }

        private string GetListRowPropertyFromDataReader(ColumnInfo column)
        {
            StringBuilder result = new StringBuilder(200);
            string readerProperty = String.Concat("reader[\"", column.DbColumn.Name, "\"]");

            result.Append(String.Format("row.Add{0}(\"{1}\", ({2}) (reader[\"{3}\"] != DBNull.Value ? {4} : {5}));", ServiceBuilderHelper.Capitalize(CSharpTypeHelper.GetCSharpTypeName(column.CSharpColumn)), column.CSharpColumn.Name, CSharpTypeHelper.GetCSharpTypeName(column.CSharpColumn), column.DbColumn.Name, MsSqlColumnHelper.GetMsSqlValue(column, readerProperty), CSharpTypeHelper.GetCSharpNull(column.CSharpColumn.Type, column.CSharpColumn.CustomType)));
            return result.ToString();
        }
        private string GetFillInstanceConstructorFromDataReader(string instance, ColumnInfo column)
        {
            StringBuilder result = new StringBuilder(200);
            string readerProperty = String.Concat("reader[\"", column.DbColumn.Name, "\"]");
            string target = String.Concat("_", ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name));
            string ordinal = String.Concat("ord", ServiceBuilderHelper.Capitalize(column.CSharpColumn.Name));

            result.Append("int ");
            result.Append(ordinal);
            result.Append(" = reader.GetOrdinal(\"");
            result.Append(column.DbColumn.Name);
            result.Append("\"); ");

            result.Append(CSharpTypeHelper.GetCSharpTypeName(column.CSharpColumn));
            result.Append(" ");
            result.Append(target);
            result.Append(" = ");

            if (column.DbColumn.IsNullable)
            {
                result.Append("null; ");
            }

            if (!String.IsNullOrEmpty(column.CSharpColumn.CustomConvertStringFromDb))
            {
                result.Append(String.Format(column.CSharpColumn.CustomConvertStringFromDb, readerProperty));
            }
            else
            {
                if (column.CSharpColumn.Type == CSharpTypeEnum.ENUM)
                {
                    result.Append(String.Format("({0})", column.CSharpColumn.CustomType));
                    result.Append("(");
                    result.Append(MsSqlColumnHelper.GetMsSqlValueV2(column, readerProperty, target, ordinal));
                    result.Append(")");
                }
                else
                {
                    result.Append(MsSqlColumnHelper.GetMsSqlValueV2(column, readerProperty, target, ordinal));
                }
            }
            result.Append(";");

            return result.ToString();
        }
        private string GetFillInstancePropertyFromDataReader(string instance, ColumnInfo column)
        {
            StringBuilder result = new StringBuilder(200);
            string readerProperty = String.Concat("reader[\"", column.DbColumn.Name, "\"]");
            string target = String.Concat(instance, ".", ServiceBuilderHelper.Capitalize(column.CSharpColumn.Name));
            string ordinal = String.Concat("ord", ServiceBuilderHelper.Capitalize(column.CSharpColumn.Name));

            result.Append("int ");
            result.Append(ordinal);
            result.Append(" = reader.GetOrdinal(\"");
            result.Append(column.DbColumn.Name);
            result.Append("\"); ");

            result.Append(target);
            result.Append(" = ");

            if (column.DbColumn.IsNullable)
            {
                result.Append("null; ");
            }

            if (!String.IsNullOrEmpty(column.CSharpColumn.CustomConvertStringFromDb))
            {
                result.Append(String.Format(column.CSharpColumn.CustomConvertStringFromDb, readerProperty));
            }
            else
            {
                if (column.CSharpColumn.Type == CSharpTypeEnum.ENUM)
                {
                    result.Append(String.Format("({0})", column.CSharpColumn.CustomType));
                    result.Append("(");
                    result.Append(MsSqlColumnHelper.GetMsSqlValueV2(column, readerProperty, target, ordinal));
                    result.Append(")");
                }
                else
                {
                    result.Append(MsSqlColumnHelper.GetMsSqlValueV2(column, readerProperty, target, ordinal));
                }
            }
            result.Append(";");
            return result.ToString();
        }
        private string GetFillParameterSetFromModel(int index, string className, ColumnInfo column)
        {
            if (column.CSharpColumn.Type != CSharpTypeEnum.ENUM)
            {
                string secondParameter = (column.CSharpColumn.IsGZipped) ? ", true" : String.Empty;
                return String.Format("\t\t\tprms[{0}].Value = DataConvertHelper.GetDbValue(_{1}.{2}{3});", index.ToString(), ServiceBuilderHelper.Decapitalize(className), ServiceBuilderHelper.Capitalize(column.CSharpColumn.Name), secondParameter);
            }
            else
            {
                return String.Format("\t\t\tprms[{0}].Value = DataConvertHelper.GetDbValue<{1}>(_{2}.{3});", index.ToString(), column.CSharpColumn.CustomType, ServiceBuilderHelper.Decapitalize(className), ServiceBuilderHelper.Capitalize(column.CSharpColumn.Name));
            }
        }
        private string GetFillParameterFromModel(ColumnInfo column)
        {
            if (column.CSharpColumn.Type != CSharpTypeEnum.ENUM)
            {
                string secondParameter = (column.CSharpColumn.IsGZipped) ? ", true" : String.Empty;
                return String.Format("\t\t\tprm.Value = DataConvertHelper.GetDbValue({0}{1});", ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name), secondParameter);
            }
            else
            {
                return String.Format("\t\t\tprm.Value = DataConvertHelper.GetDbValue<{0}>({1});", column.CSharpColumn.CustomType, ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name));
            }
        }
        private string GetFillParameterSetFromModel(int index, ColumnInfo column)
        {
            if (column.CSharpColumn.Type != CSharpTypeEnum.ENUM)
            {
                string secondParameter = (column.CSharpColumn.IsGZipped) ? ", true" : String.Empty;
                return String.Format("\t\t\tprms[{0}].Value = DataConvertHelper.GetDbValue({1}{2});", index.ToString(), ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name), secondParameter);
            }
            else
            {
                return String.Format("\t\t\tprms[{0}].Value = DataConvertHelper.GetDbValue<{1}>({2});", index.ToString(), column.CSharpColumn.CustomType, ServiceBuilderHelper.Decapitalize(column.CSharpColumn.Name));
            }
        }

        private string GetDeclareSingleParameterFromModel(string param, ColumnInfo column)
        {
            if (column.DbColumn.Length < Int32.MaxValue)
            {
                return String.Format(
                        "\t\t\t\t{0} = new SqlParameter(\"{1}\", SqlDbType.{2}, {3});",
                        param,
                        ServiceBuilderHelper.Capitalize(column.DbColumn.Name),
                        MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type),
                        column.DbColumn.Length
                    );
            }
            else
            {
                return String.Format(
                        "\t\t\t\t{0} = new SqlParameter(\"{1}\", SqlDbType.{2});",
                        param,
                        ServiceBuilderHelper.Capitalize(column.DbColumn.Name),
                        MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type)
                    );
            }
        }
        private string GetDeclareMiltipleParameterFromModel(string param, ColumnInfo column, int index)
        {
            if (column.DbColumn.Length < Int32.MaxValue)
            {
                return String.Format(
                        "\t\t\t\t{0}[{1}] = new SqlParameter(\"{2}\", SqlDbType.{3}, {4});",
                        param,
                        index.ToString(),
                        ServiceBuilderHelper.Capitalize(column.DbColumn.Name),
                        MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type),
                        column.DbColumn.Length
                    );
            }
            else
            {
                return String.Format(
                        "\t\t\t\t{0}[{1}] = new SqlParameter(\"{2}\", SqlDbType.{3});",
                        param,
                        index.ToString(),
                        ServiceBuilderHelper.Capitalize(column.DbColumn.Name),
                        MsSqlColumnHelper.GetSqlDbTypeString(column.DbColumn.Type)
                    );
            }
        }
        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior)
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions