<%--
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