分享

数据访问层代码自动生成

 悟静 2011-12-02
<%--

  Name:   数据访问层代码自动生成

  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>

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约