天天看點

CodeSmith OracleUI界面寫法

<%--

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