codesmith 实体类,数据操作类

来源:互联网 发布:淘宝怎么加入一淘条件 编辑:程序博客网 时间:2024/05/01 14:41
codesmith 实体类,数据操作类
<%-- 
Name:dd
Author:binbin     
Description: booksir
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Assembly Name="SchemaExplorer" %> 
<%@ Import Namespace="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="System.Data" %>
<%@ Property   Name="SourceTable"   Type="SchemaExplorer.TableSchema"    Category="Context"   Description="选择一个表" %>
<%@ Property Name="NameSpace" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="程序的命名空间" %>
/*
代码自动生成工具 codesmith  
Author: lovebanyi 风云
*/

using System;
using System.Web;
using System.Data;
namespace <%=NameSpace%>
{
    
public class <%=OneToUpper(SourceTable.Name)%>Info
    
{
        
<%for(int i=0;i<SourceTable.Columns.Count;i++){%>
        
private <%=GetCSharpVariableType(SourceTable.Columns[i])%> <%=OneToLower(SourceTable.Columns[i].Name)%>_;
        
<%}
%>
        
public <%=OneToUpper(SourceTable.Name)%>Info(<%for(int i=0;i<SourceTable.Columns.Count;i++){%><%=GetCSharpVariableType(SourceTable.Columns[i])%> <%=OneToLower(SourceTable.Columns[i].Name)%><%if (i<SourceTable.Columns.Count-1){%>,<%}}%>)
        
{
        
<%for(int i=0;i<SourceTable.Columns.Count;i++){%>
            
this.<%=OneToLower(SourceTable.Columns[i].Name)%>_=<%=OneToLower(SourceTable.Columns[i].Name)%>;
        
<%}
%>
        }

        
<%for(int i=0;i<SourceTable.Columns.Count;i++){%>
        
public <%=OneToUpper(SourceTable.Columns[i].Name)%>
        
{
            
get{return <%=OneToLower(SourceTable.Columns[i].Name)%>_;}
        }

        
<%}
%>
    }

    
}

<script runat="template">
//第一个字母大写
private string OneToUpper(string str)
{
    
return str.Substring(0,1).ToUpper()+str.Substring(1);
}

//第一个字母小写
private string OneToLower(string str)
{
    
return str.Substring(0,1).ToLower()+str.Substring(1);    
}


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

    }

}

</script>


<%-- 
Name:dd
Author:binbin     
Description: booksir
默认的数据表必须是ID为组件开头
在使用的过程中必须先添加数据库
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="Text" Src="" Inherits="" Debug="False" Description="Template description here." %>
<%@ Assembly Name="SchemaExplorer" %> 
<%@ Import Namespace="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="System.Data" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="选择一个表" %>
<%@ Property Name="NameSpace" Type="System.String" Default="SomeValue" Optional="True" Category="Strings" Description="程序的命名空间" %>
/*
代码自动生成工具 codesmith  
Author: lovebanyi 风云
*/

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
namespace <%=NameSpace%>
{
    
public class <%=OneToUpper(SourceTable.Name)%> 
    
{
        
public void Add(<%=OneToUpper(SourceTable.Name)%>Info <%=OneToLower(SourceTable.Name)%>Info)
        
{
            
string sql="insert into <%=SourceTable.Name%>(<%for (int i=1;i<SourceTable.Columns.Count;i++){%>[<%=SourceTable.Columns[i].Name%>]<%if (i<SourceTable.Columns.Count-1){%>,<%}%><%}%>) values(<%for (int i=1;i<SourceTable.Columns.Count;i++){%>@<%=SourceTable.Columns[i].Name%><%if (i<SourceTable.Columns.Count-1){%>,<%}%><%}%>)";
            SqlParameter parms
=GetParms();
            SetParms(parms,
<%=OneToLower(SourceTable.Name)%>Info);
            SQLHelper.ExecuteNonQuery(SQLHelper.CONN_STRING,CommandType.Text,sql,parms);
            
        }

        
public void Update(<%=OneToUpper(SourceTable.Name)%>Info <%=OneToLower(SourceTable.Name)%>Info,int id)
        
{
            
string sql="update [<%=SourceTable.Name%>] set <%for (int i=1;i<SourceTable.Columns.Count;i++){%>[<%=SourceTable.Columns[i].Name%>]=@<%=SourceTable.Columns[i].Name%><%if (i<SourceTable.Columns.Count-1){%>,<%}%><%}%> where id="+id;
            SqlParameter parms
=GetParms();
            SetParms(parms,
<%=OneToLower(SourceTable.Name)%>Info);
            SQLHelper.ExecuteNonQuery(SQLHelper.CONN_STRING,CommandType.Text,sql,parms);
        }

        
public bool Del(int id)
        
{
            
string sql="delect from [<%=SourceTable.Name%>] where id="+id;
            SqlParameter parms
=null;
            
if (SQLHelper.ExecuteNonQuery(SQLHelper.CONN_STRING,CommandType.Text,sql,parms)==1)
            
{
                
return true;
            }

            
else
            
{
                
return false;
            }

        }

        
public <%=OneToUpper(SourceTable.Name)%>Info Get(int id)
        
{    
            
string sql="select <%for (int i=1;i<SourceTable.Columns.Count;i++){%>[<%=SourceTable.Columns[i].Name%>]<%if (i<SourceTable.Columns.Count-1){%>,<%}%><%}%> from [<%=SourceTable.Name%>] where id="+id;
            SqlDataReader dr 
= SQLHelper.ExecuteReader(SQLHelper.CONN_STRING,CommandType.Text,sql,parms);
            
if (dr.Read())
            
{
                
<%=OneToUpper(SourceTable.Name)%>Info <%=OneToLower(SourceTable.Name)%>Info = new <%=OneToUpper(SourceTable.Name)%>Info(<%for (int i=1;i<SourceTable.Columns.Count;i++){%>dr.Get<%=SourceTable.Columns[i].SystemType%>(<%=i-1%>)<%if (i<SourceTable.Columns.Count-1){%>,<%}%><%}%>);
                
                
return <%=OneToLower(SourceTable.Name)%>Info;
            }

            
throw new Exception("对不起不存在这条记录");
        }

        
public DataSet GetList()
        
{
            
//这边还用这个方便,以后再考虑生成collection
            string sql="select * from [<%=SourceTable.Name%>]";
            SqlParameter[] parms 
=null;
            
using(SqlConnection conn = new SqlConnection(SQLHelper.CONN_STRING))
            
{
                conn.Open();
                
return SQLHelper.ExcuteDataSet(conn,CommandType.Text,sql,parms);
            }

        }

        
public DataSet GetList(int pageSetup,int toPage,ref int itemCount)
        
{
            SqlParameter[] parms
=null;
            
string sql="select count(*) from [<%=SourceTable.Name%>]";
            SqlDataReader dr 
= SQLHelper.ExecuteReader(SQLHelper.CONN_STRING,CommandType.Text,sql,parms);
            
if (dr.Read())
            
{
                itemCount
=dr.GetInt32(0);    
            }

            sql
="<%=SourceTable.Name%>_Page";
            parms 
= new SqlParameter[]{new SqlParameter("@pageSetup",SqlDbType.Int),new SqlParameter("@toPage",SqlDbType.Int)};
            parms[
0].Value=pageSetup;
            parms[
1].Value=toPage;
            
using (SqlConnection conn = new SqlConnection(SQLHelper.CONN_STRING))
            
{
                conn.Open();
                
return SQLHelper.ExcuteDataSet(conn,CommandType.StoredProcedure,sql,parms);
            }

            
/* 复带存储过程的代码
            CREATE PROCEDURE <%=SourceTable.Name%>_Page @pageSetup int,@topage int AS
            declare @SQLStr nvarchar(4000) 
            set @SQLStr='SELECT Top '+cast(@pageSetup as varchar)+' * FROM [<%=SourceTable.Name%>] WHERE id NOT IN (SELECT TOP '+cast(@pageSetup*@topage as varchar)+' id from [<%=SourceTable.Name%>] )'
            EXECUTE sp_executesql @SQLStr
            
*/
    
        }

        
private SqlParameter[] GetParms()
        
{
            SqlParameter[] parms
=SQLHelper.GetCachedParameters("<%=OneToUpper(SourceTable.Name)%>_Cache");
            
if (parms==null)
            
{
                parms 
= new SqlParameter[]{
                
<%for (int i=1;i<SourceTable.Columns.Count;i++){%>
                
new SqlParameter("@<%=SourceTable.Columns[i].Name%>",SqlDbType.<%=GetSqlParms(SourceTable.Columns[i])%>)<%if (i<SourceTable.Columns.Count-1){%>,<%}%>
                
<%}
%>
                }
;
                SQLHelper.CacheParameters(
"<%=OneToUpper(SourceTable.Name)%>_Cache",parms);
            }

            
return parms
        }

        
private void SetParms(SqlParameter[] parms,<%=OneToUpper(SourceTable.Name)%>Info <%=OneToLower(SourceTable.Name)%>Info)
        
{
            
<%for (int i=1;i<SourceTable.Columns.Count;i++){%>
            parms[
<%=i.ToString()%>].Value=<%=OneToLower(SourceTable.Name)%>Info.<%=OneToUpper(SourceTable.Columns[i].Name)%>
            
<%}
%>
        }

    }

    
}

<script runat="template">
//第一个字母大写
private string OneToUpper(string str)
{
    
return str.Substring(0,1).ToUpper()+str.Substring(1);
}

//第一个字母小写
private string OneToLower(string str)
{
    
return str.Substring(0,1).ToLower()+str.Substring(1);    
}

private string GetSqlParms(ColumnSchema column)
{
    
switch(column.NativeType)
    
{
        
case "varchar"return "VarChar,"+column.Size.ToString();
        
case "int"return "Int";
        
case "datetime"return "DateTime";
        
case "money"return "Money";
        
case "text"return "Text";
        
default :
        
{
            
return "";
        }

    }

}

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

    }

}

</script>