<%--
Name:OracleDAL
Author: 小谈
Description: 根据指定的数据库表生成访问层类模板
--%>
<%@ CodeTemplate Language="C#" TargetLanguage="C#" Description="根据指定的数据库表生成访问层类模板" ResponseEncoding="Unicode" %>
<%@ Property Name="DevelopersName" Type="String" Default="小谈" Category="Context" Description="开发人员姓名" %>
<%@ Property Name="SourceTable" Type="SchemaExplorer.TableSchema" Category="Context" Description="数据库表名" %>
<%@ Assembly Name="SchemaExplorer" %>
<%@ Assembly Name="System.Data" %>
<%@ Import Namespace="SchemaExplorer" %>
<%@ Import Namespace="System.Data" %>
///////////////////////////////////////////////////////////////////////////////////////
// File: <%= GetDecimal(SourceTable) %>DAL.cs
// Description: Enter summary here after generation.
// ---------------------
// Copyright <%= DevelopersName%> <%= DateTime.Now.Year %> Our Client
// ---------------------
// History
// <%= DateTime.Now.ToShortDateString() %> <%= DevelopersName%> Original Version
///////////////////////////////////////////////////////////////////////////////////////
//添加界面代码
<% =GetInsert() %>
//修改界面代码
<% =GetUpdate() %>
//删除代码
<% =GetDel() %>
//控件标准命名
<% =GetNaming() %>
<script runat="template">
//截取字符串前面的小数点只显示后面的字符串
public string GetDecimal(TableSchema table)
{
return table.Name.Substring(table.Name.LastIndexOf(".")+1).ToString();
}
#region 添加界面代码
public string GetInsert()
{//添加界面代码
string strInsert=string.Empty;
strInsert+=string.Format("{0} model=new {0}();",GetDecimal(SourceTable));
strInsert+="/r/n";
for(int i=0;i<this.SourceTable.Columns.Count;i++)
{
//如果数据类型是字符串之类的输出.ToString()
if(GetOracleDbType(this.SourceTable.Columns[i])==".ToString()")
{
strInsert+=string.Format("model.{0}=this.txt{0}.Text;",
SourceTable.Columns[i].Name);
}
//如果数据类型是int之类的输出Convert.ToInt32
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToInt32()")
{
strInsert+=string.Format("model.{0}=Convert.ToInt32(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是Double之类的输出Convert.ToDouble
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToDecimal()")
{
strInsert+=string.Format("model.{0}=Convert.ToDecimal(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是DateTime之类的输出Convert.ToDateTime
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToDateTime()")
{
strInsert+=string.Format("model.{0}=Convert.ToDateTime(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//到表的最后一列不换行
if(i!=(this.SourceTable.Columns.Count-1))
{
strInsert+="/r/n";
}
}
strInsert+="/r/n";
strInsert+=string.Format("int message= new {0}BLL().Insert(model);",GetDecimal(SourceTable));
strInsert+="/r/n";
strInsert+="if (message == 0)";
strInsert+="/r/n";
strInsert+="{";
strInsert+="/r/n";
strInsert+=" MessageBox.Show(/"添加失败!/");";
strInsert+="/r/n";
strInsert+="}";
strInsert+="/r/n";
strInsert+="else";
strInsert+="/r/n";
strInsert+="{";
strInsert+="/r/n";
strInsert+=" MessageBox.Show(/"添加成功!/");";
strInsert+="/r/n";
strInsert+="}";
strInsert+="/r/n";
return strInsert;
}
#endregion
#region 修改界面代码
public string GetUpdate()
{//修改界面代码
string strUpdate=string.Empty;
strUpdate+=string.Format("{0} model=new {0}();",GetDecimal(SourceTable));
strUpdate+="/r/n";
for(int i=0;i<this.SourceTable.Columns.Count;i++)
{
//如果数据类型是字符串之类的输出.ToString()
if(GetOracleDbType(this.SourceTable.Columns[i])==".ToString()")
{
strUpdate+=string.Format("model.{0}=this.txt{0}.Text;",
SourceTable.Columns[i].Name);
}
//如果数据类型是int之类的输出Convert.ToInt32
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToInt32()")
{
strUpdate+=string.Format("model.{0}=Convert.ToInt32(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是Double之类的输出Convert.ToDecimal()
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToDecimal()")
{
strUpdate+=string.Format("model.{0}=Convert.ToDecimal(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是DateTime之类的输出Convert.ToDateTime
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToDateTime()")
{
strUpdate+=string.Format("model.{0}=Convert.ToDateTime(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//到表的最后一列不换行
if(i!=(this.SourceTable.Columns.Count-1))
{
strUpdate+="/r/n";
}
}
strUpdate+="/r/n";
strUpdate+=string.Format("int message= new {0}BLL().Update(model);",GetDecimal(SourceTable));
strUpdate+="/r/n";
strUpdate+="if (message == 0)";
strUpdate+="/r/n";
strUpdate+="{";
strUpdate+="/r/n";
strUpdate+=" MessageBox.Show(/"修改失败!/");";
strUpdate+="/r/n";
strUpdate+="}";
strUpdate+="/r/n";
strUpdate+="else";
strUpdate+="/r/n";
strUpdate+="{";
strUpdate+="/r/n";
strUpdate+=" MessageBox.Show(/"修改成功!/");";
strUpdate+="/r/n";
strUpdate+="}";
strUpdate+="/r/n";
return strUpdate;
}
#endregion
#region 删除界面代码
public string GetDel()
{//删除界面代码
string strDel=string.Empty;
strDel+=string.Format("{0} model=new {0}();",GetDecimal(SourceTable));
strDel+="/r/n";
if(getPk().Length>0)
{//有主键的时候
for(int i=0;i<this.SourceTable.PrimaryKey.MemberColumns.Count;i++)
{//获得主键总列数
//如果数据类型是字符串之类的输出.ToString()
if(GetOracleDbType(this.SourceTable.PrimaryKey.MemberColumns[i])==".ToString()")
{
strDel+=string.Format("model.{0}=this.txt{0}.Text;",
SourceTable.Columns[i].Name);
}
//如果数据类型是int之类的输出Convert.ToInt32
if(GetOracleDbType(this.SourceTable.PrimaryKey.MemberColumns[i])=="Convert.ToInt32()")
{
strDel+=string.Format("model.{0}=Convert.ToInt32(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是Double之类的输出Convert.ToDouble
if(GetOracleDbType(this.SourceTable.PrimaryKey.MemberColumns[i])=="Convert.ToDouble()")
{
strDel+=string.Format("model.{0}=Convert.ToDouble(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是DateTime之类的输出Convert.ToDateTime
if(GetOracleDbType(this.SourceTable.PrimaryKey.MemberColumns[i])=="Convert.ToDateTime()")
{
strDel+=string.Format("model.{0}=Convert.ToDateTime(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//到表的最后一列不换行
if(i!=(this.SourceTable.Columns.Count-1))
{
strDel+="/r/n";
}
}
}
else
{//没有主键的时候全部输出列
for(int i=0;i<this.SourceTable.Columns.Count;i++)
{
//如果数据类型是字符串之类的输出.ToString()
if(GetOracleDbType(this.SourceTable.Columns[i])==".ToString()")
{
strDel+=string.Format("model.{0}=this.txt{0}.Text;",
SourceTable.Columns[i].Name);
}
//如果数据类型是int之类的输出Convert.ToInt32
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToInt32()")
{
strDel+=string.Format("model.{0}=Convert.ToInt32(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是Double之类的输出Convert.ToDouble
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToDouble()")
{
strDel+=string.Format("model.{0}=Convert.ToDouble(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//如果数据类型是DateTime之类的输出Convert.ToDateTime
if(GetOracleDbType(this.SourceTable.Columns[i])=="Convert.ToDateTime()")
{
strDel+=string.Format("model.{0}=Convert.ToDateTime(this.{0}.Text);",
SourceTable.Columns[i].Name);
}
//到表的最后一列不换行
if(i!=(this.SourceTable.Columns.Count-1))
{
strDel+="/r/n";
}
}
}
strDel+="/r/n";
strDel+=string.Format("int message= new {0}BLL().Del(model);",GetDecimal(SourceTable));
strDel+="/r/n";
strDel+="if (message == 0)";
strDel+="/r/n";
strDel+="{";
strDel+="/r/n";
strDel+=" MessageBox.Show(/"删除失败!/");";
strDel+="/r/n";
strDel+="}";
strDel+="/r/n";
strDel+="else";
strDel+="/r/n";
strDel+="{";
strDel+="/r/n";
strDel+=" MessageBox.Show(/"删除成功!/");";
strDel+="/r/n";
strDel+="}";
strDel+="/r/n";
return strDel;
}
#endregion
#region 判断数据类型
///<summary>
///根据列获取数据库的数据类型
///<summary>
public string GetOracleDbType(ColumnSchema column)
{
switch (column.NativeType)
{
case "Char": case "char": case "CHAR":
case "varchar2": case "VarChar2": case "Varchar2": case "VARCHAR2":
case "nchar": case "Nchar": case "NCHAR":
case "nvarchar2": case "NVarChar2": case "NVARCHAR2":
case "Long": case "LONG": case "long":
case "Raw": case "RAW": case "raw":
case "Long raw": case "LONG RAW": case "long raw":
case "Rowid": case "rowid": case "ROWID":
case "Blob": case "blob": case "BLOB":
case "Clob": case "clob": case "CLOB":
case "nclob": case "NCLOB": case "Nclob":
case "Bfile": case "bfile": case "BFILE":
case "Urowid": case "urowid": case "UROWID":
return ".ToString()";
case "number": case "Number": case "NUMBER":
return "Convert.ToInt32()";
case "double": case "Double": case "DOUBLE":
case "float": case "Float": case "FLOAT":
return "Convert.ToDecimal()";
case "DateTime": case "datetime": case "DATETIME":
case "Date": case "date": case "DATE":
return "Convert.ToDateTime()";
default: return "__UNKNOWN__" + column.NativeType;
}
}
#endregion
#region 控制标准命名
public string GetNaming()
{
string strtextBoxName=string.Empty;
string strlableName=string.Empty;
for(int i=0;i<this.SourceTable.Columns.Count;i++)
{
//textBox命名
strtextBoxName+=string.Format("txt{0}",this.SourceTable.Columns[i].Name);
strtextBoxName+="/r/n";
//lable命名
strlableName+=string.Format("lb{0}",this.SourceTable.Columns[i].Name);
if(i!=(this.SourceTable.Columns.Count-1))
{//不到最后一列不换行
strlableName+="/r/n";
}
}
return "//textBox命名/r/n"+strtextBoxName+"/r/n//lable命名/r/n"+strlableName;
}
#endregion