精华内容
下载资源
问答
  • 包含 OracleDBHelper SQLDBHelper IBatisNet ADO.NET、EnterpriseLibrary等多种方式生成的DAL层代码,适合新手参考
  • 自己写代码生成器之生成Dal层代码(获取数据库所有表名称) --得到数据库birthday所有表名称 select name from sysobjects where [type]='U' --select [TABLE_NAME] from INFORMATION_SCHEMA.TABLES where ...

    自己写代码生成器之生成Dal层代码(获取数据库所有表名称)

    --得到数据库birthday所有表名称
    select name from sysobjects where [type]='U'
    --select [TABLE_NAME] from  INFORMATION_SCHEMA.TABLES where [TABLE_TYPE]='BASE TABLE'


    --获取列信息,不获取数据
    select top 0 * from userInfo


    思路:拼接字符串



            /// <summary>
            /// 加载
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Index_Load(object sender, EventArgs e)
            {
                string sql = "select [TABLE_NAME] from  INFORMATION_SCHEMA.TABLES where [TABLE_TYPE]='BASE TABLE'";
                DataTable data = SqlHelper.ExeccutDataTable(sql);
                if (data.Rows.Count > 0)
                {
                    this.cmb_tableName.Items.Clear();
                    foreach (DataRow row in data.Rows)
                    {
                        string name = row["TABLE_NAME"].ToString();
                        this.cmb_tableName.Items.Add(name);
    
                    }
                    this.cmb_tableName.SelectedIndex = 0;
                }
            }
    
            /// <summary>
            /// 生成代码
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_generate_Click(object sender, EventArgs e)
            {
                string tableName = this.cmb_tableName.SelectedItem.ToString();
                string sql = "select top 0 * from " + tableName;
                DataTable data = SqlHelper.ExeccutDataTable(sql);
    
                ///生成Dal层代码
                GenerateDalCode(tableName, data);
            }
    
            #region Dal
            /// <summary>
            /// 生成Dal层代码
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            private void GenerateDalCode(string tableName, DataTable data)
            {
                StringBuilder str = new StringBuilder();
    
                //引用信息
                str.AppendLine("using System;");
                str.AppendLine("using System.Collections.Generic;");
                str.AppendLine("using System.Data;");
                str.AppendLine("using System.Data.SqlClient;");
                str.AppendLine("using System.Linq;");
                str.AppendLine("using System.Text;");
                str.AppendLine("\r");
                //命名空间
                str.AppendLine("namespace AutoCodeKldder");
                str.AppendLine("{");
                //注释信息
                str.AppendLine("\t/// <summary>");
                str.AppendLine("\t/// " + tableName + "Service");
                str.AppendLine("\t/// <summary>");
                str.AppendLine("\t[Serializable]");
                str.AppendLine("\tpublic class " + tableName + "Service");
                str.AppendLine("\t{");
    
    
                //GetModel
                GetModel(tableName, data, str);
    
                //Add
                Add(tableName, data, str);
    
                //AddOutPutField
                AddOutPutField(tableName, data, str);
    
                //Update
                Update(tableName, data, str);
    
                //Delete
                Delete(tableName, data, str);
    
                //FullDataTable
                FullDataTable(tableName, data, str);
    
                //FullDataSet
                FullDataSet(tableName, data, str);
    
                //FullDataRow
                FullDataRow(tableName, data, str);
    
                //GetRecordCount
                GetRecordCount(tableName, data, str);
    
                str.AppendLine("\t}");
                str.AppendLine("}");
                this.txt_dalcode.Text = str.ToString().Trim();
            }
    
            /// <summary>
            /// 得到一条实体
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void GetModel(string tableName, DataTable data, StringBuilder str)
            {
                //方法一
                str.AppendLine("\t\t#region GetModel");
                //方法注释
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t///得到一条" + tableName + "实体");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"_row\">DataRow</param>");
                str.AppendLine("\t\t /// <returns>" + tableName + "实体</returns>");
                str.AppendLine("\t\tpublic " + tableName + " GetModel(DataRow _row)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\t" + tableName + " _" + tableName + " = new " + tableName + "();");
                foreach (DataColumn dc in data.Columns)
                {
                    //字段名称
                    string _name = dc.ColumnName;
                    //字段类型
                    string _type = dc.DataType.ToString();
                    str.AppendLine("\t\t\tif (_row[\"" + _name + "\"] != null)");
                    str.AppendLine("\t\t\t{");
                    str.AppendLine("\t\t\t\t_" + tableName + "." + _name + " = (" + _type + ")_row[\"" + _name + "\"];");
                    str.AppendLine("\t\t\t}");
                }
                str.AppendLine("\t\t\treturn _" + tableName + ";");
                str.AppendLine("\t\t}");
                str.AppendLine("");
    
                //方法二
                //方法注释
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t///得到一条" + tableName + "实体");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t /// <returns>" + tableName + "实体</returns>");
                str.AppendLine("\t\tpublic " + tableName + " GetModel(string sql)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn GetModel(SqlHelper.ExecuteDataRow(sql));");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 添加
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void Add(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region Add");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 添加");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"_" + tableName + "\">" + tableName + "实体</param>");
                str.AppendLine("\t\t/// <returns>是否成功</returns>");
                str.AppendLine("\t\tpublic bool Add(" + tableName + " _" + tableName + ")");
                str.AppendLine("\t\t{");
                //拼接T-sql语句和SqlParameter[]
                string str_sql_1 = "\"insert into [dbo].[userInfo](";
                string str_sql_2 = "\r\n\t\t\t_sql+= \"vlaues(";
                string str_param = "SqlParameter[] _param = {";
                int idx = 0;
                foreach (DataColumn dc in data.Columns)
                {
                    string _name = dc.ColumnName;
                    string _dh = ",";
                    //最后一个字段没有逗号
                    if (idx == data.Columns.Count - 1)
                    {
                        _dh = "";
                    }
                    //不是自增长字段
                    if (!dc.AutoIncrement)
                    {
                        str_sql_1 += "[" + _name + "]" + _dh;
                        str_sql_2 += "@" + _name + _dh;
                        //str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\", System.Data.SqlDbType.Int) { Value = _" + tableName + "." + _name + " }" + _dh;
                        str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\",_userInfo." + _name + ")" + _dh;
                    }
                    idx++;
                }
                str_sql_1 += ")\";";
                str_sql_2 += ")\";";
                str_param += "\r\n\t\t\t\t\t\t};";
                str.AppendLine("\t\t\tstring _sql = " + str_sql_1 + str_sql_2);
                str.AppendLine("\t\t\t" + str_param);
                str.AppendLine("\t\t\treturn SqlHelper.ExecuteNonQuery(_sql,_param) > 0;");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 添加并返回指定列
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void AddOutPutField(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region AddOutPutField");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 添加并返回指定列");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"_" + tableName + "\">" + tableName + "实体</param>");
                str.AppendLine("\t\t/// <param name=\"_field\">指定列</param>");
                str.AppendLine("\t\t/// <returns>指定列</returns>");
                str.AppendLine("\t\tpublic object AddOutPutField(" + tableName + " _" + tableName + ", object _field)");
                str.AppendLine("\t\t{");
                //拼接T-sql语句和SqlParameter[]
                string str_sql_1 = "\"insert into [dbo].[userInfo](";
                string str_sql_2 = "\r\n\t\t\t_sql+= \" output inserted.\" + _field;\r\n\t\t\t_sql+= \" vlaues(";
                string str_param = "SqlParameter[] _param = {";
                int idx = 0;
                foreach (DataColumn dc in data.Columns)
                {
                    string _name = dc.ColumnName;
                    string _dh = ",";
                    //最后一个字段没有逗号
                    if (idx == data.Columns.Count - 1)
                    {
                        _dh = "";
                    }
                    //不是自增长字段
                    if (!dc.AutoIncrement)
                    {
                        str_sql_1 += "[" + _name + "]" + _dh;
                        str_sql_2 += "@" + _name + _dh;
                        str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\",_userInfo." + _name + ")" + _dh;
                    }
                    idx++;
                }
                str_sql_1 += ")\";";
                str_sql_2 += ")\";";
                str_param += "\r\n\t\t\t\t\t\t};";
                str.AppendLine("\t\t\tstring _sql = " + str_sql_1 + str_sql_2);
                str.AppendLine("\t\t\t" + str_param);
                str.AppendLine("\t\t\treturn SqlHelper.ExecuteScalar(_sql,_param);");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 根据主键修改
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void Update(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region Update");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 根据主键修改");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"_" + tableName + "\">" + tableName + "实体</param>");
                str.AppendLine("\t\t/// <returns>是否成功</returns>");
                str.AppendLine("\t\tpublic bool Update(" + tableName + " _" + tableName + ")");
                str.AppendLine("\t\t{");
                //拼接T-sql语句和SqlParameter[]
                string str_sql = "\"update [dbo].[userInfo] set ";
                string str_param = "SqlParameter[] _param = {";
                int idx = 0;
                //标识字段
                string _AutoIncrement = "";
                foreach (DataColumn dc in data.Columns)
                {
                    string _name = dc.ColumnName;
                    string _dh = ",";
                    //最后一个字段没有逗号
                    if (idx == data.Columns.Count - 1)
                    {
                        _dh = "";
                    }
                    //不是自增长字段
                    if (!dc.AutoIncrement)
                    {
                        str_sql += "[" + _name + "]" + "=@" + _name + _dh;
                    }
                    else
                    {
                        _AutoIncrement = dc.ColumnName;
                    }
                    str_param += "\r\n\t\t\t\t\t\t\tnew SqlParameter(\"@" + _name + "\",_userInfo." + _name + ")" + _dh;
                    idx++;
                }
                str_sql += "\";\r\n\t\t\t_sql += \" where " + _AutoIncrement + "=@" + _AutoIncrement + "\";";
                str_param += "\r\n\t\t\t\t\t\t};";
                str.AppendLine("\t\t\tstring _sql = " + str_sql);
                str.AppendLine("\t\t\t" + str_param);
                str.AppendLine("\t\t\treturn SqlHelper.ExecuteNonQuery(_sql, _param) > 0;");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 根据主键删除
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void Delete(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region Delete");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 根据主键删除");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"id\">主键</param>");
                str.AppendLine("\t\t/// <returns>是否成功</returns>");
                str.AppendLine("\t\tpublic bool Delete(int id)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\tstring _sql = \"delete from [dbo].[userInfo] where [id]=@id\";");
                str.AppendLine("\t\t\tSqlParameter[] _param = {");
                str.AppendLine("\t\t\t\t\t\t\t\t\t\tnew SqlParameter(\"@id\",id)");
                str.AppendLine("\t\t\t\t\t\t\t\t\t};");
                str.AppendLine("\t\t\treturn SqlHelper.ExecuteNonQuery(_sql, _param) > 0;");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 填充DataTable
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void FullDataTable(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region FullDataTable");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 填充DataTable");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>DataTable</returns>");
                str.AppendLine("\t\tpublic DataTable FullDataTable(string _sql)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataTable(_sql);");
                str.AppendLine("\t\t}");
                str.AppendLine("");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 填充DataTable");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>DataTable</returns>");
                str.AppendLine("\t\tpublic DataTable FullDataTable(string _sql, SqlParameter[] _para)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataTable(_sql, _para);");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 填充DataSet
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void FullDataSet(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region FullDataSet");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 填充DataSet");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>DataSet</returns>");
                str.AppendLine("\t\tpublic DataSet FullDataSet(string _sql)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataSet(_sql);");
                str.AppendLine("\t\t}");
                str.AppendLine("");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 填充DataSet");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>DataSet</returns>");
                str.AppendLine("\t\tpublic DataSet FullDataSet(string _sql, SqlParameter[] _para)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.ExeccutDataSet(_sql, _para);");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 填充DataRow
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void FullDataRow(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region FullDataRow");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 填充DataRow");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>DataRow</returns>");
                str.AppendLine("\t\tpublic DataRow FullDataRow(string _sql)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.ExecuteDataRow(_sql);");
                str.AppendLine("\t\t}");
                str.AppendLine("");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 填充DataRow");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>DataRow</returns>");
                str.AppendLine("\t\tpublic DataRow FullDataRow(string _sql, SqlParameter[] _para)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.ExecuteDataRow(_sql, _para);");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            /// <summary>
            /// 返回数据记录条数
            /// </summary>
            /// <param name="tableName">表名称</param>
            /// <param name="data">数据源</param>
            /// <param name="str">字符串</param>
            private static void GetRecordCount(string tableName, DataTable data, StringBuilder str)
            {
                str.AppendLine("");
                str.AppendLine("\t\t#region GetRecordCount");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 返回数据记录条数");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <returns>记录条数</returns>");
                str.AppendLine("\t\tpublic int GetRecordCount(string _sql)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.GetRecordCount(_sql);");
                str.AppendLine("\t\t}");
                str.AppendLine("");
                str.AppendLine("\t\t/// <summary>");
                str.AppendLine("\t\t/// 返回数据记录条数");
                str.AppendLine("\t\t/// </summary>");
                str.AppendLine("\t\t/// <param name=\"sql\">T-sql语句</param>");
                str.AppendLine("\t\t/// <param name=\"_where\">过滤条件</param>");
                str.AppendLine("\t\t/// <returns>记录条数</returns>");
                str.AppendLine("\t\tpublic int GetRecordCount(string _sql, string _where)");
                str.AppendLine("\t\t{");
                str.AppendLine("\t\t\treturn SqlHelper.GetRecordCount(_sql, _where);");
                str.AppendLine("\t\t}");
                str.AppendLine("\t\t#endregion");
            }
    
            #endregion


            /// <summary>
            /// 复制代码
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btn_copy_Click(object sender, EventArgs e)
            {
                Clipboard.Clear();
                if (this.tabControl.SelectedIndex == 0)
                {
                    if (string.IsNullOrWhiteSpace(this.txt_modelcode.Text))
                    {
                        return;
                    }
                    else
                    {
                        Clipboard.SetText(this.txt_modelcode.Text);
                        MessageBox.Show("成功复制Models代码。");
                    }
                }
                else
                {
                    if (string.IsNullOrWhiteSpace(this.txt_dalcode.Text))
                    {
                        return;
                    }
                    else
                    {
    
                        Clipboard.SetText(this.txt_dalcode.Text);
                        MessageBox.Show("成功复制Dal代码。");
                    }
                }


    展开全文
  • 原文:How to Use CslaGen to Generate CSLA Data Access Layer Code最近用起了csla,这东东没个代码生成感觉很不方便...缺点嘛,只有DAL层代码,权限、验证这些还得找其他模板了本示例中的cslagen版本:Nightly ...

    原文:How to Use CslaGen to Generate CSLA Data Access Layer Code

     

    最近用起了csla,这东东没个代码生成感觉很不方便。找到了CslaGen这个工具,

    优点嘛,1,图形化界面,设计BO方便;2,设计文档用xml保存,便于管理。

    缺点嘛,只有DAL层的代码,权限、验证这些还得找其他模板了

     

    本示例中的cslagen版本:Nightly Build 2012.03.11

    相关工具的下载:

    1,CslaGen

    2,CodeSmith插件

    1.数据库结构(如图1),由Mother表和Daughter表组成,后者通过Daughter字段关联到前者。

                             图1

     

    ExpandedBlockStart.gifSql Script
    /****** Object:  Table [dbo].[Mother]    Script Date: 08/07/2007 08:07:46 ******/    
    SET ANSI_NULLS ON    
    GO    
    SET QUOTED_IDENTIFIER ON    
    GO    
    CREATE TABLE [dbo].[Mother](    
        [ID] [int] IDENTITY(1,1NOT NULL,
        [Forename] [nvarchar](15NOT NULL,
        [Surname] [nvarchar](50NOT NULL,
        [BirthDate] [datetime] NOT NULL,
        [BirthPlace] [nvarchar](30NOT NULL,
        [LastChanged] [timestamp] NOT NULL,
     CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED     
    (    
        [ID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]    
    ON [PRIMARY]    
        
        
    /****** Object:  Table [dbo].[Daughter]    Script Date: 08/07/2007 08:07:26 ******/    
    SET ANSI_NULLS ON    
    GO    
    SET QUOTED_IDENTIFIER ON    
    GO    
    CREATE TABLE [dbo].[Daughter](    
        [DaughterID] [int] IDENTITY(1,1NOT NULL,
        [Forename] [nvarchar](15NOT NULL,
        [Surname] [nvarchar](50NOT NULL,
        [BirthDate] [datetime] NOT NULL,
        [BirthPlace] [nvarchar](30NOT NULL,
        [MotherID] [int] NOT NULL,
        [LastChanged] [timestamp] NOT NULL,
     CONSTRAINT [PK_Child] PRIMARY KEY CLUSTERED     
    (    
        [DaughterID] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]    
    ON [PRIMARY]    
        
    GO    
    ALTER TABLE [dbo].[Daughter]  WITH CHECK ADD  CONSTRAINT [FK_Daughter_Mother] FOREIGN KEY([MotherID])    
    REFERENCES [dbo].[Mother] ([ID])    
    GO    
    ALTER TABLE [dbo].[Daughter] CHECK CONSTRAINT [FK_Daughter_Mother]    
        
    INSERT INTO Mother    
        (Forename, Surname, BirthDate, BirthPlace)
    VALUES    
        ('Josefina''Silva''01-01-1950 0:00:00''Braga')
        
    INSERT INTO Mother    
        (Forename, Surname, BirthDate, BirthPlace)
    VALUES    
        ('Maria Antónia''Cazenga''01-01-1940 0:00:00''Malanje')
        
    INSERT INTO Mother    
        (Forename, Surname, BirthDate, BirthPlace)
    VALUES    
        ('Sarah''Johnson''01-01-1960 0:00:00''London')
        
    INSERT INTO Mother    
        (Forename, Surname, BirthDate, BirthPlace)
    VALUES    
        ('Françoise''Auteil''01-01-1965 0:00:00''Marseille')
        
    INSERT INTO Mother    
        (Forename, Surname, BirthDate, BirthPlace)
    VALUES    
        ('Martha''Kent''01-01-1961 0:00:00''Smallville')
        
    INSERT INTO Mother    
        (Forename, Surname, BirthDate, BirthPlace)
    VALUES    
        ('Pascale''Chaumier''01-01-1975 0:00:00''Avignon')
        
    INSERT INTO Daughter    
        (Forename, Surname, BirthDate, BirthPlace, MotherID)
    VALUES    
        ('Antonieta''Silva''01-01-1970 0:00:00''Gondomar''1')
        
    INSERT INTO Daughter    
        (Forename, Surname, BirthDate, BirthPlace, MotherID)
    VALUES    
        ('Ricardina''Silva''01-01-1973 0:00:00''Porto''1')
        
    INSERT INTO Daughter    
        (Forename, Surname, BirthDate, BirthPlace, MotherID)
    VALUES    
        ('Inácia''Cazenga''01-01-1960 0:00:00''Cabinda''2')
        
    INSERT INTO Daughter    
        (Forename, Surname, BirthDate, BirthPlace, MotherID)
    VALUES    
        ('Francisca''Cazenga''01-01-1961 0:00:00''Luanda''2')
        
    INSERT INTO Daughter    
        (Forename, Surname, BirthDate, BirthPlace, MotherID)
    VALUES    
        ('Marianne''Chaumier''01-01-1995 0:00:00''Le Thor''6')
        
    INSERT INTO Daughter    
        (Forename, Surname, BirthDate, BirthPlace, MotherID)
    VALUES    
        ('Nadine''Chaumier''01-01-2000 0:00:00''Pernes-les-Fontaines''6')

    2.BO层次结构(见图2)

                                                         图2

    假设Mother,Daughter都是很大对象,有一堆的属性,载入他们的集合对象,开销会很大。

    通常我们会设计一个轻量级的abcInfo对象(只定义些Mother/Daughter的必要信息,比如名字什么的)

    ,然后载入abcInfo的集合对象abcList。注意abcList和abcInfo都只是Readonly对象.

    这里,MotherList是Readonly Root Collection对象,他的元素MotherInfo是Readonly Child。

    要编辑某个母亲时,载入Mother这个Editable Root对象。Mother Root对象有DaughterList(Readonly Child Collection)这么个属性,后者是由DaughterInfo(Readonly Child对象组成),当编辑某个女儿时,

    载入Daughter这个Editable Root对象。

    3.创建ReadOnly Root Collection对象

    先添加一个新项目,File/New,然后连到数据库上"Connect to Database"

    3.1. 在"Schema Objects"中, 选择Mother表.
    3.2. 在"Columns"中, 选择ID, Forename, Surname and LastChanged这几个列
    3.3. 右键菜单中点Create Read Only -> ReadOnly Root Collection


    3.4. 在"New Object Defaults"界面,"CollectionName”栏输入MotherList,"ItemName" 栏输入MotherInfo.
    3.5. 给MotherList对象添加criterion

        3.5.1. 在"Csla Objects"中选择"MotherList"
        3.5.2. 在"Csla Object Info"/"03. Criteria",点"Criteria Objects",见图3.5.2-1

                                                              图3.5.2-1
        3.5.3.在"Criteria Collection Editor"界面, 添加一个名为"AllCollection" 的Criteria(你也可以使用其他名字).
        3.5.4. 在"Misc"/"cGetOptions",设置"DataPortal", "Factory","Procedure"属性为True, ("ProcedureName" 会自动变成GetMotherList ),然后点OK

    3.6. 再添加一个criterion,根据姓/名查找母亲。

        3.6.1. 重复3.5.1 to 3.5.4,Name栏输入name
        3.6.2. "ProcedureName"栏输入GetMotherListByName.
        3.6.3. 点"Criteria Properties" .


       

         3.6.4. 点"DbBindColumn".
        3.6.5. 在"Schema Objects"界面, 选择Mother表的Forename字段
        3.6.6. 然后再添加Surname.

     

     

     

    4.创建Mother(Editable Root)

        4.1. 在”Schema Objects", 选择Mother表, 右键菜单中点"Create Editable Root".

        4.2. 在"09. System.Object Overrides", 把"ToString”栏的下拉菜单中选中Forename和Surname

      

    5.创建DaughterList(Readonly Child Collection),DaughterInfo(Readonly Child)

        5.1. 在“Schema Objects”, 选择"Daughter"表.
        5.2. 在"Columns",选择DaughterID, Forename, Surname, MotherID, LastChanged这几个字段

        5.3. 右键菜单中,点Create Readonly -> Read Only Collection -> Read Only Child Collectioin 

        5.4. 在"New Object Defaults",CollectionName栏输入DaughterList,ItemName中输入DaughterInfo.
        5.5. Parent Type下拉菜单中选中Mother
        5.6.然后要把Mother对象与这个DaughterList对象关联起来
            5.6.1. "Property Name In Parent T" 输入DaughterList

     

    6.创建Daughter(Editable Root Object)

        6.1. 在"Schema Objects", 选择Mother表,右键菜单中点"Create Editable Root". 

        6.2. "09. System.Object Overrides", 修改"ToString"属性,选择Forename,Surname.

    至此,所有BO对象都已经建好。选择代码输出路径"Output Directory",然后点"generate"生成代码

     

     

     


    转载于:https://www.cnblogs.com/wordmy/archive/2012/04/01/2429311.html

    展开全文
  • SuperDataAdpter.cs 可以省去烦人的实例化实体类的过程,无须使用框架,绝对轻量级代码。希望可以帮忙需要的人省一点时间。 使用方法: //list填充: List<MODEL> modellist=SuperDataAdpter.FillModelList(new ...
  • namespace DAL {  public class DataAccess  {  //创建连接access数据库的字符串  private string AccessCennection = null;  #region 构造函数  ///  /// 构造函数创建连接字符串  ///...
     
    

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    using System.IO;
    using ACS = System.Data.OleDb;
    namespace DAL
    {
        public class DataAccess
        {
            //创建连接access数据库的字符串
            private string AccessCennection = null;

            #region 构造函数
            /// <summary>
            /// 构造函数创建连接字符串
            /// </summary>
            public DataAccess()
            {
                this.AccessCennection = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Inetpub\\wwwroot\\biz\\App_Data\\ccc.mdb";//连接数据库字符串
            }
            #endregion

            #region 创建连接数据库的连接
            /// <summary>
            /// 创建连接数据库的连接
            /// </summary>
            /// <param name="acs_connection">连接数据库的字符串</param>
            /// <returns>返回实体连接</returns>
            private ACS.OleDbConnection CreateACS_Connection(string acs_connection)
            {
                return new ACS.OleDbConnection(acs_connection);
            }
            #endregion

            #region 创建操纵数据库的实体命令
            /// <summary>
            /// 创建操纵数据库的实体命令
            /// </summary>
            /// <param name="sql">数据库操纵语言</param>
            /// <param name="acs_connection">数据库连接实体</param>
            /// <returns>数据库命令实体</returns>
            private ACS.OleDbCommand CreateACS_Command(string sql, ACS.OleDbConnection acs_connection)
            {
                return new ACS.OleDbCommand(sql, acs_connection);
            }
            #endregion

            #region 创建填充数据用的数据适配器
            /// <summary>
            /// 创建填充数据用的数据适配器
            /// </summary>
            /// <param name="acs_command">数据库命令实体</param>
            /// <returns>数据库适配器的实体</returns>
            private ACS.OleDbDataAdapter CreateACS_Adapter(ACS.OleDbCommand acs_command)
            {
                return new ACS.OleDbDataAdapter(acs_command);
            }
            #endregion

            #region 通过查询语句返回用户需要的结果
            /// <summary>
            /// 通过查询语句返回用户需要的结果
            /// </summary>
            /// <param name="sql">查询语句</param>
            /// <returns>返回的结果集</returns>
            public DataSet Select(string sql)
            {
                ACS.OleDbConnection acs_connection = null;
                ACS.OleDbCommand acs_command;
                ACS.OleDbDataAdapter acs_adapter;
                DataSet ds = new DataSet();
                try
                {
                    acs_connection = CreateACS_Connection(this.AccessCennection);
                    acs_command = CreateACS_Command(sql, acs_connection);
                    acs_adapter = CreateACS_Adapter(acs_command);
                    acs_connection.Open();
                    acs_adapter.Fill(ds);
                }
                catch (Exception acse)
                {

                }
                finally
                {
                    acs_connection.Close();
                }
                return ds;
            }
            #endregion

            #region 批处理执行SQL操作
            /// <summary>
            /// 批处理执行SQL操作
            /// </summary>
            /// <param name="SqlStrings">SQL语句泛型类</param>
            /// <returns>是否成功</returns>
            public Boolean ExecuteSQL(List<String> SqlStrings)
            {
                bool success = true;
                int Rows = 0;
                ACS.OleDbConnection acs_connection = null;
                acs_connection = CreateACS_Connection(this.AccessCennection);
                ACS.OleDbCommand acs_command = new System.Data.OleDb.OleDbCommand();
                acs_connection.Open();
                ACS.OleDbTransaction trans = acs_connection.BeginTransaction();
                acs_command.Connection = acs_connection;
                acs_command.Transaction = trans;
                try
                {
                    for (int i = 0; i < SqlStrings.Count; i++)
                    {
                        acs_command.CommandText = SqlStrings[i].ToString();
                        Rows += acs_command.ExecuteNonQuery();
                    }
                    trans.Commit();
                }
                catch
                {
                    success = false;
                    trans.Rollback();
                }
                finally
                {
                    acs_connection.Close();
                }
                if (Rows == 0)
                    success = false;
                return success;
            }
            public Boolean ExecuteSQL(String SqlString)
            {
                List<String> SqlStrings = new List<String>();
                SqlStrings.Add(SqlString);
                return ExecuteSQL(SqlStrings);
            }
            #endregion
            #region 在一个数据表中插入一条记录
            /// <summary>
            /// 在一个数据表中插入一条记录
            /// </summary>
            /// <param name="TableName">表名</param>
            /// <param name="Cols">哈希表,键值(Key)为字段名,值(value)为字段值</param>
            /// <returns>是否成功</returns>
            public bool Insert(String TableName, Hashtable Cols)
            {
                int Count = 0;//用于SQL语句创建
                int Rows = 0;//记录受影响的行数
                if (Cols.Count <= 0)
                {
                    return true;
                }
                String Fields = "(";
                String Values = " Values('";
                foreach (DictionaryEntry item in Cols)
                {
                    if (Count != 0)
                    {
                        Fields += ",";
                        Values += "','";
                    }
                    Fields += item.Key.ToString();
                    Values += item.Value.ToString();
                    Count++;
                }
                Fields += ")";
                Values += "')";
                String SqlString = "insert into " + TableName + Fields + Values;
                return ExecuteSQL(SqlString);
            }
            #endregion
            #region 更新一个数据表的一条记录
            /// <summary>
            /// 更新一个数据表的一条记录
            /// </summary>
            /// <param name="TableName">表名</param>
            /// <param name="Cols">哈希表,键值为字段名,值为字段值</param>
            /// <param name="Where">Where字句</param>
            /// <returns></returns>
            public Boolean Update(String TableName, Hashtable Cols, String Where)
            {
                int Count = 0;
                if (Cols.Count <= 0)
                {
                    return true;
                }
                String Fields = " ";
                foreach (DictionaryEntry item in Cols)
                {
                    if (Count != 0)
                    {
                        Fields += ",";
                    }
                    Fields += item.Key.ToString();
                    Fields += "=";
                    Fields += item.Value.ToString();
                }
                Fields += " ";
                String SqlString = "update " + TableName + " set " + Fields + Where;
                return ExecuteSQL(SqlString);
            }
            #endregion
            #region 获取数据返回一个Dataset
            /// <summary>
            /// 获取数据返回一个Dataset
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>DataSet</returns>
            public DataSet GetDataSet(String SqlString)
            {
                ACS.OleDbConnection acs_connection = null;
                ACS.OleDbCommand acs_command;
                ACS.OleDbDataAdapter acs_adapter;
                DataSet ds = new DataSet();
                try
                {
                    acs_connection = CreateACS_Connection(this.AccessCennection);
                    acs_command = CreateACS_Command(SqlString, acs_connection);
                    acs_adapter = CreateACS_Adapter(acs_command);
                    acs_connection.Open();
                    acs_adapter.Fill(ds);
                }
                catch (Exception acse)
                {
                }
                finally
                {
                    acs_connection.Close();
                }
                if (ds.Tables.Count == 0)
                {
                    return null;
                }
                return ds;
            }
            #endregion
            #region 根据用户所给的条件返回用户需要的数据
            /// <summary>
            /// 根据用户所给的条件返回用户需要的数据
            /// </summary>
            /// <param name="TableName">表名</param>
            /// <param name="ParameterTypes">参数类型</param>
            /// <param name="ParameterValues">参数值</param>
            /// <returns>DataSet</returns>
            public DataSet Select(String TableName, List<String> ParameterTypes, List<String> ParameterValues)
            {
                StringBuilder sbSql = new StringBuilder("SELECT * FROM ");
                sbSql.Append(TableName);
                if (ParameterTypes[0] != null && ParameterValues[0] != null)
                {
                    sbSql.Append(" WHERE ").Append(ParameterTypes[0]).Append(" ='").Append(ParameterValues[0]).Append("'");
                    //如果还有参数就继续加
                    for (int i = 1; i < ParameterTypes.Count; i++)
                    {
                        sbSql.Append(" and ").Append(ParameterTypes[i]).Append(" ='").Append(ParameterValues[i]).Append("'");
                    }
                }
                String SqlString = sbSql.ToString();
                return GetDataSet(SqlString);
            }
            /// <summary>
            /// 根据用户所给的条件返回用户需要的数据(单参数)
            /// </summary>
            /// <param name="TableName">表名</param>
            /// <param name="ParameterType">参数类型</param>
            /// <param name="ParameterValue">参数值</param>
            /// <returns>DataSet</returns>
            public DataSet Select(String TableName, String ParameterType, String ParameterValue)
            {
                List<String> ParameterTypes = new List<String>();
                List<String> ParameterValues = new List<String>();
                ParameterTypes.Add(ParameterType);
                ParameterValues.Add(ParameterValue);
                return Select(TableName, ParameterTypes, ParameterValues);
            }
            #endregion
            #region 获取数据,返回一个DataRow
            /// <summary>
            /// 获取数据,返回一个DataRow
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>DataRow</returns>
            public DataRow GetDataRow(String SqlString)
            {
                DataSet ds = GetDataSet(SqlString);
                ds.CaseSensitive = false;
                if (ds.Tables[0].Rows.Count > 0)
                {
                    return ds.Tables[0].Rows[0];
                }
                else
                {
                    return null;
                }
            }
            /// <summary>
            /// 根据条件返回用户需要的数据
            /// </summary>
            /// <param name="TableName">表名</param>
            /// <param name="ParameterTypes">参数类型</param>
            /// <param name="ParameterValues">参数值</param>
            /// <returns>DataRow</returns>
            public DataRow Select_DataRow(String TableName, List<String> ParameterTypes, List<String> ParameterValues)
            {
                DataSet ds = Select(TableName, ParameterTypes, ParameterValues);
                ds.CaseSensitive = false;
                if (ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        return ds.Tables[0].Rows[0];
                    }
                    else
                    {
                        return null;
                    }
                }
                else
                {
                    return null;
                }
            }

            /// <summary>
            /// 根据用户给定的条件返回数据(单参数)
            /// </summary>
            /// <param name="TableName">表名</param>
            /// <param name="ParameterType">参数类型</param>
            /// <param name="ParameterValue">参数值</param>
            /// <returns>DataRow</returns>
            public DataRow Select_DataRow(String TableName, String ParameterType, String ParameterValue)
            {
                List<String> ParameterTypes = new List<String>();
                List<String> ParameterValues = new List<String>();
                ParameterTypes.Add(ParameterType);
                ParameterValues.Add(ParameterValue);
                return Select_DataRow(TableName, ParameterTypes, ParameterValues);
            }
            #endregion
            #region 从一个DataRow中,安全得到colname中的值,值为字符串类型
            /// <summary>
            /// 从一个DataRow中,安全得到colname中的值,值为字符串类型
            /// </summary>
            /// <param name="row">数据行对象</param>
            /// <param name="colname">列名</param>
            /// <returns>如果值存在,返回;否则,返回System.String.Empty</returns>
            public static String ValidateDataRow_S(DataRow row, String colname)
            {
                if (row[colname] != DBNull.Value)
                    return row[colname].ToString();
                else
                    return System.String.Empty;
            }
            #endregion
        }
    }

    展开全文
  • 一提到三层架构,就让我想到为了完成基于活动记录开发模式之数据库的crud工作,需要为所有的表去...这里我通过泛型基类来去掉我们的重复代码,先看看改造前的dal层写法“ 是吧,这就是经典的dal层写法,我们可...

    一提到三层架构,就让我想到为了完成基于活动记录开发模式之数据库的crud工作,需要为所有的表去实现的最基本的 add/update/delete/select/selectPage;这些都是重复代码,当时的解决方法就是代码生成器,有了代码生成器,就可以不用去面对这些重复代码。

    这里我通过泛型基类来去掉我们的重复代码,先看看改造前的dal层写法“

     

    是吧,这就是经典的dal层写法,我们可以看到增删改查的几个代码

    再看看改造后的代码

     

    重点看BaseRepo<Words> 这个是通过泛型实现的基类,代码如图:

     

    这个是我中转实现的,用来完成DapperRepository的构造函数需要的2个参数,这样我的每个表都不需要重复去给构造参数了,因没引入ioc,所以直接给出new 实例而不是构造注入的方式

    具体看github上的dapper poco的仓储实现 http://dapper.phnx47.net/

    对应的 dll引用:

    Install-Package MicroOrm.Dapper.Repositories


    bll层也可以类似的完成这样的基类功能,不需要每个都写 add
    谢谢/。

    转载于:https://www.cnblogs.com/smboy/p/6871294.html

    展开全文
  • DAL层代码

    2010-05-31 17:42:00
    using System; using System.Data; using System.Text; using System.Data.SqlClient; using Test.IDAL; using Maticsoft.DBUtility;//请先添加引用 namespace Test....
  • 先引用 using System.Data; using System.Data.SqlClient; using System.Configuration; public class SqlHelper { /// <... private static string strConn = ConfigurationManager.Conn.
  • LinqToSql类生成工具 自动生成Model层 和DAL层代码,并且带有注释
  • DAL 数据链路 非查询/查询 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data;using System.Data.SqlClient; namespace ...
  • 这是我第二遍做机房收费系时的DAL层配合基类的代码 DAL层代码: Imports System.Data.SqlClient Imports Entity Public Class da_User '继承da_Base基类 Inherits da_Base '连接数据库 Private connStr ...
  • C#DAL代码生成器

    2013-12-12 13:50:57
    自己写的DAL层代码生成器,生成的代码会有小错误,比如少了标点什么的,稍微改改是可以用的,附上源代码供参考和完善
  • using System; using System.Collections.Generic; using System.Text; using System.Configuration;...//操作Sql Server 2005数据库 namespace DAL {  public
  • namespace DAL {  public class DataAccess  {  //创建连接access数据库的字符串  private string AccessCennection = null;  #region 构造函数  ///  /// 构造函数创建连接字符串  ///  ...
  • (2)编写代码: (要使用数据库 建议创建随意数据库就可以) 创建配置文件App.config代码例如以下: <?xml version="1.0"?> <configuration> <connectionStrings> <add name="connstr...
  • DAL层的方法基本与BLL层一致,前期可以这么做,简单易于理解,后期BLL一个方法可能包含若干个DAL的方法。 参考代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text...
  • 说白了,你无需写DAL层代码,因为凡是通用的东西都已经有人写好了,只是好用不好用的问题,逻辑是否复杂的问题。有 的人在DAL中写一大堆业务逻辑,把原本应该写到BLL层的代码写到DAL层中,这反而是坑爹的做法。所以....
  • Ctrip DAL是携程框架部开发的数据库访问框架,支持代码生成和水平扩展。其由携程技术中心框架部DAL团队开发,历经3年不断打磨,并在长期的实际使用中基于大量的用户反馈不断优化。 开源范围包括代码生成器,Java...
  • Code Generation Tool(C#)是专门针对SQL SERVER 2005以上数据库实现自动生成DAL层的MODEL的C#代码。在分层开发中,将数据库表实现类操作是常用的方法,但是枯燥和繁琐的代码编写占用了我们大量的时间,于是通过使用...
  • DAL层:DalPageNav.cs:using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Web;using SinaSNS.Model;using SinaSNS.Interface;using SinaSNS.DBUtility; namespace...
  • .net三层结构生成器,帮助你自动生成Model,Dal,Bell层代码,不在把时间浪费在,生成底层代码上
  • ASP.NET三层架构DAL层

    2020-06-27 19:10:01
    DAL层:Data Access Layer 数据访问层,这是三层中的一层它依赖于数据库, DAL是数据访问层,主要是写一些数据库连接操作的代码!也就是操作数据库用的。 1. 模板: windows->类库 2.引用: Model 3. 原则:一个实体一个...
  • 1.修改Web层代码为非Web应用程序格式:不生成Designer.cs 文件 去除 web层的命名空间 2.WebBuilder.dll 修改了时间格式字段Input Text为TextBox 3.修改了提示信息为英文字段名称的问题 4.修改信息页面的提交按钮事件...
  • 1.修改Web层代码为非Web应用程序格式:不生成Designer.cs 文件 去除 web层的命名空间2.WebBuilder.dll 修改了时间格式字段Input Text为TextBox 3.修改了提示信息为英文字段名称的问题 4.修改信息页面的提交按钮...
  • 首先新建二个项目(BLL:逻辑,DAL:数据):如下图然后在DAL(数据)中新建一个.xsd数据集(名字可以自己定义):如下图创建好了如下:打开这个已创建好的TestDataSet.xsd:如下图这里我选择从服务器资源管理器添加...
  • 三层架构中的DAL层,连接sqlsever数据库,其他数据库也可,因资源确实比较珍惜实用(我做东西一直在用这个),网络上没见过相同的代码,所以资源分比较高,若下载后不能用,请联系我~

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,273
精华内容 509
关键字:

dal层代码