using System; using System.Text; using System.ComponentModel; using CodeSmith.Engine; using System.Data; using SchemaExplorer; namespace CodeTemplateRule { /**////<summary> /// CodeSmith自动生成代码所用到的函数 ///</summary> publicclass CodeTemplateRule { /**////<summary> /// 获取所有列的集合 ///</summary> ///<param name="dataBase">数据库Schema</param> ///<param name="tableName">表名</param> ///<returns>Columns Schema</returns> public ColumnSchemaCollection GetColumnCollection(DatabaseSchema dataBase,string tableName) { TableSchemaCollection tables =new TableSchemaCollection(dataBase.Tables); ColumnSchemaCollection columns=null; for(int i=0;i<tables.Count;i++) { if(tables[i].Name.ToUpper()==tableName.ToUpper()) { TableSchema ts=tables[i]; columns=new ColumnSchemaCollection(ts.Columns); } } return columns; } /**////<summary> /// 获取处理后的表名 例如:ORG_Person,返回Person ///</summary> ///<param name="tableName">表名</param> ///<returns>返回处理后的表名</returns> publicstring GetTableName(string tableName) { int i=tableName.IndexOf("_"); return tableName.Substring(i+1,tableName.Length-(i+1)); } /**////<summary> /// 获取唯一号的变量名,第一个字母小写 ///</summary> ///<param name="guidColumn">唯一号列名</param> ///<returns>唯一号的变量名</returns> publicstring GetGuidColumnVar(string guidColumn) { string guid; guid=guidColumn.Substring(0,1).ToLower()+guidColumn.Substring(1,guidColumn.Length-1); return guid; } /**////<summary> /// 获取c#变量类型 ///</summary> ///<param name="column">列</param> ///<returns>c#变量类型</returns> publicstring GetType(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"int"; 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; } } } /**////<summary> /// 获取c#变量类型默认值 ///</summary> ///<param name="column">列</param> ///<returns>c#变量类型默认值</returns> publicstring GetDefaultValue(ColumnSchema column) { if (column.Name.EndsWith("TypeCode")) return column.Name; switch (column.DataType) { case DbType.AnsiString: return"\"\""; case DbType.AnsiStringFixedLength: return"\"\""; case DbType.Binary: return"null"; case DbType.Boolean: return"false"; case DbType.Byte: return"0"; case DbType.Currency: return"0"; case DbType.Date: return"DateTime.Parse(\"1900-1-1\")"; case DbType.DateTime: return"DateTime.Parse(\"1900-1-1\")"; case DbType.Decimal: return"0"; case DbType.Double: return"0"; case DbType.Guid: return"Guid.NewGuid().ToString()"; case DbType.Int16: return"0"; case DbType.Int32: return"0"; case DbType.Int64: return"0"; case DbType.Object: return"\"\""; case DbType.SByte: return"0"; case DbType.Single: return"0"; case DbType.String: return"\"\""; case DbType.StringFixedLength: return""; case DbType.Time: return"DateTime.Parse(\"1900-1-1\")"; case DbType.UInt16: return"0"; case DbType.UInt32: return"0"; case DbType.UInt64: return"0"; case DbType.VarNumeric: return"0"; default: { return"__UNKNOWN__"+ column.NativeType; } } } /**////<summary> /// 获取c#变量类型默认值 ///</summary> ///<param name="column">列</param> ///<returns>c#变量类型默认值</returns> publicstring GetConvert(ColumnSchema column) { if (column.Name.EndsWith("TypeCode")) return column.Name; switch (column.DataType) { case DbType.AnsiString: return"Convert.ToString"; case DbType.AnsiStringFixedLength: return"Convert.ToString"; case DbType.Binary: return"Convert.ToByte"; case DbType.Boolean: return"Convert.ToBoolean"; case DbType.Byte: return"Convert.ToInt32"; case DbType.Currency: return"Convert.ToDecimal"; case DbType.Date: return"Convert.DateTime"; case DbType.DateTime: return"Convert.DateTime"; case DbType.Decimal: return"Convert.ToDecimal"; case DbType.Double: return"Convert.ToDouble"; case DbType.Guid: return"Convert.ToString"; case DbType.Int16: return"Convert.ToInt16"; case DbType.Int32: return"Convert.ToInt32"; case DbType.Int64: return"Convert.ToInt64"; case DbType.Object: return"Convert.ToString"; case DbType.SByte: return"Convert.ToByte"; case DbType.Single: return"Convert.ToInt32"; case DbType.String: return"Convert.ToString"; case DbType.StringFixedLength: return"Convert.ToString"; case DbType.Time: return"Convert.DateTime"; case DbType.UInt16: return"Convert.ToUInt16"; case DbType.UInt32: return"Convert.ToUInt32"; case DbType.UInt64: return"Convert.ToUInt64"; case DbType.VarNumeric: return"Convert.ToDecimal"; default: { return"__UNKNOWN__"+ column.NativeType; } } } } }