日期:2011-06-15  浏览次数:20538 次

笔者近期在Vs2005平台和SqlServer2005平台之上研发了一个C#代码生成器,支持数据库表和C#数据对象的直接映射,以及CRUD操作代码的自动生成,用户只需要实现IDAL接口即可,该工具能够显著提高开发速度,让开发人员从繁重的数据库表对象封装编码中解脱出来(工具下载地址:http://itabby.com/index-5.asp),现特将核心处理代码进行发表,仅供参考:

///数据对象提取部分数据库类型和C#对象类型之间的转换过程
private string ConvertSqlDataReader(string sqlReader,string type, int i)
{
    switch (type.Trim().ToLower())
    {
 case "bigint": return sqlReader + ".GetInt64(" + i.ToString() + ")";
 ///case "binary": return sqlReader + ".GetValue(" + i.ToString() + ")";
 case "bit": return sqlReader + ".GetBoolean(" + i.ToString() + ")";
 case "char": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "datetime": return sqlReader + ".GetDateTime(" + i.ToString() + ")";
 case "decimal": return sqlReader + ".GetDecimal(" + i.ToString() + ")";
 case "float": return sqlReader + ".GetFloat(" + i.ToString() + ")";
 ///case "image": return sqlReader + ".GetValue(" + i.ToString() + ")";
 case "int": return sqlReader + ".GetInt32(" + i.ToString() + ")";
 case "money": return sqlReader + ".GetDecimal(" + i.ToString() + ")";
 case "nchar": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "ntext": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "nvarchar": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "real": return sqlReader + ".GetFloat(" + i.ToString() + ")";
 case "smalldatetime": return sqlReader + ".GetDateTime(" + i.ToString() + ")";
 case "smallint": return sqlReader + ".GetInt16(" + i.ToString() + ")";
 case "smallmoney": return sqlReader + ".GetDecimal(" + i.ToString() + ")";
 case "text": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "timestamp": return sqlReader + ".GetDateTime(" + i.ToString() + ")";
 case "tinyint": return sqlReader + ".GetByte(" + i.ToString() + ")";
 case "udt": return sqlReader + ".GetValue(" + i.ToString() + ")";
 case "uniqueidentifier": return sqlReader + ".GetGuid(" + i.ToString() + ")";
 ///case "varbinary": return sqlReader + ".GetValue(" + i.ToString() + ")";
 case "varchar": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "variant": return sqlReader + ".GetValue(" + i.ToString() + ")";
 case "xml": return sqlReader + ".GetString(" + i.ToString() + ")";
 case "numeric": return sqlReader + ".GetDecimal(" + i.ToString() + ")";
 default: throw new ArgumentException(type + " not in Itabby.Product.SqlCode.SqlCode.ConvertGetMethod process list.");
    }
}
///数据库类型完全限定名称还原
private string ConvertSqlDbType(string type)
{

    switch (type.Trim().ToLower())
    {
 case "bigint": return "System.Data.SqlDbType.BigInt";
 case "binary": return "System.Data.SqlDbType.Binary";
 case "bit": return "System.Data.SqlDbType.Bit";
 case "char": return "System.Data.SqlDbType.Char";
 case "datetime": return "System.Data.SqlDbType.DateTime";
 case "decimal": return "System.Data.SqlDbType.Decimal";
 case "float": return "System.Data.SqlDbType.Float";
 case "image": return "System.Data.SqlDbType.Image";
 case "int": return "System.Data.SqlDbType.Int";
 case "money": return "System.Data.SqlDbType.Money";
 case "nchar": return "System.Data.SqlDbType.NChar";
 case "ntext": return "System.Data.SqlDbType.NText";
 case "nvarchar": return "System.Data.SqlDbType.NVarChar";
 case "real": return "System.Data.SqlDbType.Real";
 case "smalldatetime": return "System.Data.SqlDbType.SmallDateTime";
 case "smallint": return "System.Data.SqlDbType.SmallInt";<