codesmith用access的mdb文件作数据源的模板引用

从blog.org的我的原博客中迁入

发表时间:2006-9-7 11:10:32

codesmith是一款运用非常文泛,也是功能强大的代码生成工具,但查遍整个baidu,google,很难找到其与access或mdb相关联的资料.经反复验证,方法如下:

在schema explorer上点manage data sources按钮出现对话框 ,在对话框中点add按钮,增加一个连接,在provider type中选ADOXSchemaProviderdb,在连接字符串中输入Provider=Microsoft.Jet.OLEDB.4.0;Data Source=路径+文件名,最后点test看连接是否正确.

从blog.org的我的原博客中迁入
续:前
发表时间:2006-9-7 17:12:28


CodeTemplateRule.cs

using System;
using System.Text;
using System.ComponentModel;
using CodeSmith.Engine;
using System.Data;
using SchemaExplorer;

namespace CodeTemplateRule
{
    /** <summary>
    /// CodeSmith自动生成代码所用到的函数
    /// </summary>
    public class 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>
        public string GetTableName(string tableName)
        {
            int i=tableName.IndexOf("_");
            return tableName.Substring(i+1,tableName.Length-(i+1));
        }
       
        /** <summary>
        /// 获取唯一号的变量名,第一个字母小写
        /// </summary>
        /// <param name="guidColumn">唯一号列名</param>
        /// <returns>唯一号的变量名</returns>
        public string 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>
        public string 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>
        public string 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>
        public string 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;
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值