<%--
Name:   数据访问层代码自动生成
Author: 水木

Description: 用来生成三层结构数据访问层代码
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Src="" ResponseEncoding="UTF-8" Inherits="" Debug="False" Description="Template description here." %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Optional="False" Category="SqlTable" Description="请输入数据库表" %>
<%@ Property Name="NameSpace" Type="System.String" Default="DAL" Optional="False" Category="NameSpace" Description="请输入命名空间"%>
<%@ Property Name="Author" Type="System.String" Default="郁时中" Optional="False" Category="other" Description="作者"%>
<%@ Property Name="DefaultDatabase" Type="System.Boolean" Default="True" Optional="False" Category="Booleans" Description="This is a sample boolean property." %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Assembly Name="mscorlib" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Collections.Generic" %>
using System.Data;
using System;
using System.Text;
using System.Data.SqlClient;
using System.Collections.Generic;
using <%=NameSpace%>.Models;

namespace <%=NameSpace%>.DAL
{
/// <summary>
/// 数据访问类<%=SourceTable.Name%>Service
/// 作者:<%=this.Author%>
/// 创建日期:<%=System.DateTime.Now.ToLongDateString()%>
/// </summary>
public class <%=SourceTable.Name%>Service : <%=NameSpace%>.IDAL.I<%=SourceTable.Name%>Service
{
<% if(!DefaultDatabase) {%>DbHelper DbHelper = new DbHelper();<%}%>
#region CodeSmith自动生成
/// <summary>
/// 得到一个DataSet
/// </summary>
public DataSet GetData(string strWhere)
{
      StringBuilder strSql=new StringBuilder();
      strSql.Append("select <%=GetColumnNameList(SourceTable)%> ");
      strSql.Append(" FROM <%=SourceTable.Name%> ");
      if(strWhere.Trim()!="")
      {
       strSql.Append(" where "+strWhere);
      }
      return DbHelper.Query(strSql.ToString());
}

/// <summary>
/// 增加一条数据
/// </summary>
public void Add(<%=this.GetModelName(this.SourceTable)%> <%=this.GetObjectName(this.SourceTable)%>)
{
      StringBuilder strSql=new StringBuilder();
      strSql.Append("insert into <%=SourceTable.Name%>(");
      strSql.Append("<%=GetColumnNameList(SourceTable)%>)");
      strSql.Append(" values (");
      strSql.Append("<%=GetColumnNameListPara(SourceTable)%>)");
      SqlParameter[] parameters = {
    <%for(int i=0; i<SourceTable.Columns.Count; i++) {%>
     <%if(i == SourceTable.Columns.Count -1)
     {%>
      new SqlParameter("@<%=SourceTable.Columns[i].Name%>", <%=GetSqlDbType(SourceTable.Columns[i])%>,<%=SourceTable.Columns[i].Size%>)
     <%}
     else
     {%>
      new SqlParameter("@<%=SourceTable.Columns[i].Name%>", <%=GetSqlDbType(SourceTable.Columns[i])%>,<%=SourceTable.Columns[i].Size%>),
     <%}%>
    <%}%>
     };
      <%for(int i=0; i<SourceTable.Columns.Count; i++)
   {%>
   parameters[<%=i%>].Value=<%=this.GetObjectName(this.SourceTable)%>.<%=SourceTable.Columns[i].Name%>;
   <%}%>

DbHelper.ExecuteSql(strSql.ToString(),parameters);
}
/// <summary>
/// 更新一条数据
/// </summary>
public void Update(<%=this.GetModelName(this.SourceTable)%> <%=this.GetObjectName(this.SourceTable)%>)
{
   StringBuilder strSql=new StringBuilder();
   strSql.Append("update <%=SourceTable.Name%> set ");
   strSql.Append("<%=GetUpdateColumn(SourceTable)%>");
   strSql.Append(" where <%=GetKeyColumn(SourceTable).Name%>=@<%=GetKeyColumn(SourceTable).Name%> ");
   SqlParameter[] parameters = {
    <%for(int i=0; i<SourceTable.Columns.Count; i++)
    {%>
     <%if(i == SourceTable.Columns.Count -1)
     {%>
      new SqlParameter("@<%=SourceTable.Columns[i].Name%>", <%=GetSqlDbType(SourceTable.Columns[i])%>,<%=SourceTable.Columns[i].Size%>)
     <%}
     else{%>
      new SqlParameter("@<%=SourceTable.Columns[i].Name%>", <%=GetSqlDbType(SourceTable.Columns[i])%>,<%=SourceTable.Columns[i].Size%>),
     <%}%>
    <%}%>
   };
   <%for(int i=0; i<SourceTable.Columns.Count; i++)
   {%>
    parameters[<%=i%>].Value = <%=this.GetObjectName(this.SourceTable)%>.<%=SourceTable.Columns[i].Name%>;
   <%}%>

DbHelper.ExecuteSql(strSql.ToString(),parameters);
}

/// <summary>
/// 删除数据
/// </summary>
public void Delete(<% =GetPrimaryKeyType(SourceTable) + " " + GetKeyColumn(SourceTable).Name.ToLower()%>)
{
   StringBuilder strSql=new StringBuilder();
   strSql.Append("delete <% =SourceTable.Name%> ");
   strSql.Append(" where <% =GetKeyColumn(SourceTable).Name %>=@<% =GetKeyColumn(SourceTable).Name %> ");
   SqlParameter[] parameters = {
    new SqlParameter("@<% =GetKeyColumn(SourceTable).Name %>", <%=GetKeyColumnSqlType(SourceTable)%>, <%=GetKeyColumnSqlLength(SourceTable)%>)};
   parameters[0].Value = <% =GetKeyColumn(SourceTable).Name.ToLower() %>;
  
   DbHelperSQL.ExecuteSql(strSql.ToString(),parameters);
}

/// <summary>
/// 得到一个泛型集合
/// </summary>
public IList<<%=this.GetModelName(this.SourceTable)%>> GetList(string strWhere)
    {
            StringBuilder strSql = new StringBuilder();
            strSql.Append("select <%=GetColumnNameList(SourceTable)%> ");
            strSql.Append(" FROM <%=SourceTable.Name%> ");
            if (strWhere.Trim() != "")
            {
                strSql.Append(" where " + strWhere);
            }

IList<<%=this.GetModelName(this.SourceTable)%>> list = new List<<%=this.GetModelName(SourceTable)%>>();

using (SqlDataReader reader = DbHelper.ExecuteReader(strSql.ToString()))
            {
                while (reader.Read())
                {
                    <%=this.GetModelName(SourceTable)%> <%=this.GetObjectName(SourceTable)%> = new <%=this.GetModelName(SourceTable)%>();
      <% for(int i=0; i<SourceTable.Columns.Count; i++)
      {%>
       <%=this.GetObjectName(SourceTable)%>.<%=SourceTable.Columns[i].Name%> = <%=GetSqlReader(SourceTable.Columns[i])%>;
      <%}%>
                    list.Add(<%=this.GetObjectName(SourceTable)%>);
                }
            }

return list;
    }

/// <summary>
/// 得到一个对象实体
/// </summary>
public <%=this.GetModelName(SourceTable)%> GetModel(<%=GetPrimaryKeyType(SourceTable) + " " + GetKeyColumn(SourceTable).Name.ToLower()%>)
{
   StringBuilder strSql=new StringBuilder();
   strSql.Append("select <%=GetColumnNameList(SourceTable)%> from <%=SourceTable.Name%> ");
   strSql.Append(" where <%=GetKeyColumn(SourceTable).Name%>=@<%=GetKeyColumn(SourceTable).Name%> ");
   SqlParameter[] parameters = {
    new SqlParameter("@<% =GetKeyColumn(SourceTable).Name %>", <%=GetKeyColumnSqlType(SourceTable)%>, <%=GetKeyColumnSqlLength(SourceTable)%>)};
   parameters[0].Value = <%=GetKeyColumn(SourceTable).Name.ToLower()%>;
  
   <%=this.GetModelName(SourceTable)%> <%=this.GetObjectName(SourceTable)%> = new <%=this.GetModelName(SourceTable)%>();
   DataSet ds=DbHelper.Query(strSql.ToString(),parameters);
  
   foreach(DataRow dr in ds.Tables[0].Rows)
   {
    <% for(int i=0; i<SourceTable.Columns.Count; i++){%>
     <%=this.GetObjectName(SourceTable)%>.<%=SourceTable.Columns[i].Name%>=<%=GetDrString(SourceTable.Columns[i])%>
    <%}%>
   }
   if(ds.Tables[0].Rows.Count=0)
   {
    <%=this.GetObjectName(SourceTable)%>=null;
   }
  
   return <%=this.GetObjectName(SourceTable)%>;
  
}
#endregion
}
}
<script runat="template">
public string GetUpdateColumn(TableSchema table)
{
string strUpdate = "";
for(int i=0; i<table.Columns.Count; i++)
{
if(!table.Columns[i].IsPrimaryKeyMember)
{
   if(strUpdate == string.Empty)
    strUpdate = "[" + table.Columns[i].Name + "]=@" + table.Columns[i].Name;
   else
    strUpdate = strUpdate + "," + "[" + table.Columns[i].Name + "]=@" + table.Columns[i].Name;
}
}
return strUpdate;
}

public string GetDrString(ColumnSchema column)
{
string sqlReader = "dr[\"" + column.Name + "\"]";

string csharpType = GetCSharpType(column);
if(csharpType.ToLower() == "string")
return sqlReader + ".ToString();";

string temp = "(" + GetCSharpType(column) + ")" + sqlReader;
if(column.AllowDBNull)
{
temp = sqlReader + ".ToString() == Strimg.Empty ? null : " + temp;
}

temp = temp + ";";
return temp;
}

public string GetDataSet(ColumnSchema column)
{
string sqlReader = "ds.Tables[0].Rows[0][\"" + column.Name + "\"]";

string csharpType = GetCSharpType(column);
if(csharpType.ToLower() == "string")
return sqlReader + ".ToString();";

string temp = "(" + GetCSharpType(column) + ")" + sqlReader;
if(column.AllowDBNull)
{
temp = sqlReader + ".ToString() == Strimg.Empty ? null : " + temp;
}

temp = temp + ";";
return temp;
}

public string GetSqlReader(ColumnSchema column)
{
string sqlReader = "reader[\"" + column.Name + "\"]";

string csharpType = GetCSharpType(column);
if(csharpType.ToLower() == "string")
return sqlReader + ".ToString()";

string temp = "(" + GetCSharpType(column) + ")" + sqlReader;
if(column.AllowDBNull)
{
temp = sqlReader + ".ToString() == Strimg.Empty ? null : " + temp;
}

temp = temp;
return temp;
}

public string GetColumnNameListPara(TableSchema table)
{
string columnList = "";

for(int i=0; i<table.Columns.Count; i++)
{
if(columnList == string.Empty)
   columnList = "@" + table.Columns[i].Name;
else
   columnList = columnList + ",@" + table.Columns[i].Name;
}

return columnList;
}

public string GetColumnNameList(TableSchema table)
{
string columnList = "";

for(int i=0; i<table.Columns.Count; i++)
{
if(columnList == string.Empty)
   columnList = "[" + table.Columns[i].Name + "]";
else
   columnList = columnList + ",[" + table.Columns[i].Name + "]";
}

return columnList;
}

public ColumnSchema GetKeyColumn(TableSchema table)
{
ColumnSchema column = null;
for(int i=0; i<table.Columns.Count; i++)
{
if(table.Columns[i].IsPrimaryKeyMember)
   column = table.Columns[i];
}
return column;
}

public string GetKeyColumnSqlType(TableSchema table)
{
ColumnSchema column = GetKeyColumn(table);
if(column == null)
return string.Empty;

return GetSqlDbType(column);
}

public int GetKeyColumnSqlLength(TableSchema table)
{
ColumnSchema column = GetKeyColumn(table);
if(column == null)
return 0;

return column.Size;
}

public string GetPrimaryKeyType(TableSchema table)
{
int columnIndex = 0;
for(int i=0; i<table.Columns.Count; i++)
{
if(table.Columns[i].IsPrimaryKeyMember)
   columnIndex = i;
}

return GetCSharpType(table.Columns[columnIndex]);
}

public string GetSqlDbType(ColumnSchema column)
{
switch (column.NativeType.ToLower())
{
case "bigint": return "SqlDbType.BigInt";
case "binary": return "SqlDbType.Binary";
case "bit": return "SqlDbType.Bit";
case "char": return "SqlDbType.Char";
case "datetime": return "SqlDbType.DateTime";
case "decimal": return "SqlDbType.Decimal";
case "float": return "SqlDbType.Float";
case "image": return "SqlDbType.Image";
case "int": return "SqlDbType.Int";
case "money": return "SqlDbType.Money";
case "nchar": return "SqlDbType.NChar";
case "ntext": return "SqlDbType.NText";
case "numeric": return "SqlDbType.Decimal";
case "nvarchar": return "SqlDbType.NVarChar";
case "real": return "SqlDbType.Real";
case "smalldatetime": return "SqlDbType.SmallDateTime";
case "smallint": return "SqlDbType.SmallInt";
case "smallmoney": return "SqlDbType.SmallMoney";
case "sql_variant": return "SqlDbType.Variant";
case "sysname": return "SqlDbType.NChar";
case "text": return "SqlDbType.Text";
case "timestamp": return "SqlDbType.Timestamp";
case "tinyint": return "SqlDbType.TinyInt";
case "uniqueidentifier": return "SqlDbType.UniqueIdentifier";
case "varbinary": return "SqlDbType.VarBinary";
case "varchar": return "SqlDbType.VarChar";
default: return "__UNKNOWN__" + column.NativeType;
}
}

public string GetCSharpType(ColumnSchema column)
{
string para = "";
if (column.Name.EndsWith("TypeCode"))
return column.Name;

switch (column.DataType)
{
case DbType.AnsiString:
   para = "string";
   break;
case DbType.AnsiStringFixedLength:
   para = "string";
   break;
case DbType.Binary:
   para = "byte[]";
   break;
case DbType.Boolean:
   para = "bool";
   break;
case DbType.Byte:
   para = "int";
   break;
case DbType.Currency:
   para = "decimal";
   break;
case DbType.Date:
   para = "DateTime";
   break;
case DbType.DateTime:
   para = "DateTime";
   break;
case DbType.Decimal:
   para = "decimal";
   break;
case DbType.Double:
   para = "double";
   break;
case DbType.Guid:
   para = "Guid";
   break;
case DbType.Int16:
   para = "short";
   break;
case DbType.Int32:
   para = "int";
   break;
case DbType.Int64:
   para = "long";
   break;
case DbType.Object:
   para = "object";
   break;
case DbType.SByte:
   para = "sbyte";
   break;
case DbType.Single:
   para = "float";
   break;
case DbType.String:
   para = "string";
   break;
case DbType.StringFixedLength:
   para = "string";
   break;
case DbType.Time:
   para = "TimeSpan";
   break;
case DbType.UInt16:
   para = "ushort";
   break;
case DbType.UInt32:
   para = "uint";
   break;
case DbType.UInt64:
   para = "ulong";
   break;
case DbType.VarNumeric:
   para = "decimal";
   break;
default:
   para = "__UNKNOWN__" + column.NativeType;
   break;
}

return para;
}

#region Pascal 将字符串转换成Pascal格式(首字母大写:适用于类名,类的属性的名称)
public string ToPascal(string s)
{
return s.Substring(0,1).ToUpper()+s.Substring(1);
}
#endregion
#region 将字符串转换成Camel格式(首字母小写:适用于类的属性的字段)
public string ToCamel(string s)
{
return s.Substring(0,1).ToLower()+s.Substring(1);
}
#endregion

#region 得到实体类型名
public string GetModelName()
{
string s=this.SourceTable.Name;
if(s.EndsWith("s"))
{
s=s.Substring(0,s.Length-1);
}
return this.ToPascal(s);
}

public string GetModelName(TableSchema table)
{
string s=table.Name;
if(s.EndsWith("s"))
{
s=s.Substring(0,s.Length-1);
}
return this.ToPascal(s);
}
#endregion

#region 得到对象的名称
public string GetObjectName(TableSchema table)
{
return this.ToCamel(this.GetModelName(table));
}
#endregion
</script>

数据访问层代码自动生成相关推荐

  1. Spring Boot项目利用MyBatis Generator进行数据层代码自动生成

    概 述 MyBatis Generator (简称 MBG) 是一个用于 MyBatis和 iBATIS的代码生成器.它可以为 MyBatis的所有版本以及 2.2.0之后的 iBATIS版本自动生成 ...

  2. 利用MyBatis Generator进行数据层代码自动生成

    1. 新建maven工程 导入如下pom: <?xml version="1.0" encoding="UTF-8"?> <project x ...

  3. 自动生成三层结构代码(3)--生成数据访问层Insert方法

    版权所有:基础软件.作者邮箱:sun.j.l.studio@gmail.com.本文首发于 http://www.cnblogs.com/FoundationSoft.文章转载请保持此版权信息并注明出 ...

  4. 数据层(DAL)自动生成库

    Data Access Layer Auto Generation Library 源英文文档 <http://www.codeproject.com/KB/aspnet/auto_genera ...

  5. ClownFish:比手写代码还快的通用数据访问层

    最近花了二个月的业余时间重写了我以前的通用数据访问层, 由于是重写,所以我给这个项目取了个新名字:ClownFish 如果需要了解ClownFish的使用方法,请点击ClownFish 使用说明 Cl ...

  6. ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出...

    ASP.NET3.5 企业级项目开发 -- 第二章(续) 数据访问层(DAL)的开发解决方案提出 前言:首先给大家说声"对不起",因为自从打算写这系列的文章以来,得到大家很多的支持 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先

    基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先 转载于:https://github.com/Meowv/Blog 本篇主要使用Entity Framework ...

  8. PP团队圣经巨著《Application Architecture Guide2.0》14章-数据访问层

    第十四章 数据访问层指导 概览 这一章主要描述设计数据访问层时要注意的主要原则.它们覆盖了设计数据访问层遇到的通常问题及错误.下面的图表展示了数据层怎样嵌入一个通用的应用架构. (cnblog我的图片 ...

  9. ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发

    为什么80%的码农都做不了架构师?>>>    ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发          前言:本篇主要讲述数据访问层的开发, ...

最新文章

  1. jsTree设置默认节点全部展开的方法
  2. Python 技术篇-用base64库对音频、图片等文件进行base64编码和解码实例演示
  3. 7、MySQL选择数据库(MySQL USE语句)
  4. 7.3.3 多路复用IO(IO multiplexing)
  5. 转观念 变架构 补短板——析科华恒盛向数据中心方案商转型
  6. win10远程桌面连接ubuntu18.04
  7. pandas.DataFrame.iterrows
  8. 17秋 软件工程 团队第五次作业 Alpha Scrum3
  9. jmeter+maven+jenkins自动化接口测试(下)
  10. 一致性Hash与负载均衡
  11. 简单的小说阅读网站JavaWeb项目
  12. Typora的历史版本下载地址
  13. 我看过的关于职业规划最好最全面的一篇文章
  14. SPSS如何进行随机抽样
  15. ATtiny85简单引脚配置
  16. CSDN 第一篇随笔
  17. 计算机更换固态硬盘方法,换SSD不重装系统的方法
  18. 沟通的艺术:看入人里,看出人外
  19. VRChat火了,但VR社交还没迎来最好的时代
  20. arduino(19 ):使用ESP32连接 PS3 蓝牙手柄,需要在windows 上先连接成功,然后在修改mac地址,才可以连接成功,但是目前正在测试中,需要在windows上配对成功。

热门文章

  1. 图论 —— 网络流 —— 最小割 —— 平面图与对偶图
  2. 矩形嵌套(NYOJ-16)
  3. 图论 —— 图的连通性 —— Kosaraju 算法
  4. 机器翻译(信息学奥赛一本通-T1401)
  5. 18 SD配置-主数据-定义公用分销渠道
  6. C语言 sprintf实现
  7. ResNet网络总结
  8. python epub.js_如何利用Python打包HTML页面为epub?
  9. 字符串数组的排序c++_Java——数组相关知识点及练习演绎
  10. 人工智能计算机的相关信息,关于人工智能,计算机领域的尖端(三)