Newlife XCode组件相关文章目录:

上一篇介绍了Xcode的数据库反向工程的相关知识后,今天正好使用Xcode向数据库插入随机数据,特地记下,方便后来学习的人。

有关Xcode的基础使用知识,还请大家自行到开源的网站和论坛去,也可以在论坛提问。下面进入正题:

1、为什么要向数据库随机插入数据

      今天写程序,用昨天的数据库反向工程生成了数据库,但是里面没有数据,又懒得动手去手动插入。想写一个程序随机插入测试数据,当然写之前又在群里面喊了一下,看有没有人已经做过,可是一群友说,原话不记得了,反正意思就是说:"这么简单还来问,自己For一个不就行了"。当然这个群友说得没错,但是说实话 这个想法太幼稚了点,一个程序员或者开发人员每次想到问题,不是去抽象,不是尽量去做得通用点,每次都重复的For,那也太悲催了。虽然我不是很专业开发人员,但是我还是想写一个通用点的程序,来方便的插入随机数据,而不是每一次,每一个表都去For。

2.功能要求

    1.使用Xcode,强大就不用说了,可以完全屏蔽数据库的差异,而且也很容易对数据库架构信息进行操作 ;

    2.要求只需要 ”使用数据库连接字符串“,和插入数据条数,就可以进行数据插入,不需要实体类,当然你的数据库已经存在了(不存在就先设计好,或者说反向工程建好);

    3.要求更加字段类型和长度,随机插入对应类型的数据

3.开发过程

    其实上面要求挺简单的,可能大家认为主要对第2个要求比较难,因为只需要数据库连接字符串和数据库就来进行,当然需要Xcode.下面直接贴代码吧,代码里面有注释:

   按照大石头提出的意见,对程序进行了修改: 




xcode schemes 添加参数 xcode怎么输入数据_数据库

xcode schemes 添加参数 xcode怎么输入数据_xcode_02

View Code  
  
 1      /// 
      
    <summary> 
    
      2  
             
    /// 
      随机填充指定数据库连接字符串中的所有表
      3  
             
    /// 
      
    </summary> 
    
      4  
             
    /// 
      
    <param name="connStr"> 
    数据库连接字符串 
    </param> 
    
      5  
             
    /// 
      
    <param name="needCount"> 
    填充的记录数目 
    </param> 
    
      6          
    public  
    static  
    void FillDataForDb( 
    string connStr,  
    int needCount =  
    50) 
    
 7         {     
 8             DAL dal = DAL.Create(connStr);     // 
    根据数据库连接字符串创建数据访问对象 
    
      9             List<IDataTable> tableList = dal.Tables; 
    // 
    获取数据库的所有表和架构信息 
    
     10             tableList.RemoveAll(t => t.IsView); 
    // 
    过滤掉视图 
    
     11              
    foreach ( 
    var item  
    in tableList) 
    
12             {     
13                      // 
    首先根据表名称获取当前表的实体操作接口 
    
     14                 IEntityOperate entity = dal.CreateOperate(item.Name); 
    
15                      for ( 
    int i =  
    0; i < NeedCount; i++) 
    
16                 {     
17                     IEntity model = entity.Create();     // 
    创建数据实体接口 
    
     18                     FieldItem[] filds = entity.Fields; 
    // 
    获取所有的字段信息 
    
     19                      
    foreach ( 
    var fild  
    in entity.Fields) 
    
20                     {     
21                              if (!fild.IsIdentity) 
    
22                             model.SetItem(fild.Name, GetRandomValue(fild));     
23                     }     
24                     model.Save();     // 
    保存数据 
    
     25                 } 
    
26             }     
27


 详细的不解释了,有什么问题,大家到论坛去提问,论坛地址在后面。主要一个说明的是有一个GetRandomValue(FieldItem fild) 函数,它会根据字段信息来获取对应类型的随机值,这段代码比较简陋,先贴出来吧,感觉应该有更简单的方法去操作,希望知道的人提醒一下。【果然,本来开始用Switch的,结果不支持Type,原来是自己用错了,大石头提出来,呵呵,我顺便更新了。 


xcode schemes 添加参数 xcode怎么输入数据_数据库

xcode schemes 添加参数 xcode怎么输入数据_xcode_02

View Code    
 1      ///       
    <summary> 
    
      2               
    /// 
     根据字段类型和长度获取对应类型的随机数据
      3               
    /// 
      
    </summary> 
    
      4               
    /// 
      
    <param name="fild"> 
    字段对象 
    </param> 
    
      5               
    /// 
      
    <returns> 
    对应的随机数据 
    </returns> 
    
      6              public  
    static  
    object GetRandomValue(FieldItem fild) 
    
 7         {                 
 8                  switch (Type.GetTypeCode(fild.Field.DataType))     
 9             {     
10                      case TypeCode.Boolean:      return RandomHelper.GetRandomBool(); 
    
11                      case TypeCode.Byte:     return RandomHelper.GetRandomByte(); 
    
12                      case TypeCode.Char:     return RandomHelper.GetRandomChar();                 
    
13                      case TypeCode.DateTime:     return RandomHelper.GetRandomDateTime(); 
    
14                      case TypeCode.Decimal:     return RandomHelper.GetRandomDouble( 
    0, NeedCount* 
    10.1); 
    
15                      case TypeCode.Double:     return RandomHelper.GetRandomDouble( 
    0, NeedCount* 
    10.1);                
    
16                      case TypeCode.Int16:     return RandomHelper.GetRandomInt( 
    1,UInt16.MaxValue );                    
    
17                      case TypeCode.Int32:     return RandomHelper.GetRandomInt( 
    1,NeedCount * 
    50);       
    
18                      case TypeCode.Int64:     return RandomHelper.GetRandomInt( 
    1,NeedCount* 
    100);                                     
    
19                      case TypeCode.SByte:     return RandomHelper.GetRandomInt( 
    1, 
    127);  
    
20                      case TypeCode.Single:     return RandomHelper.GetRandomDouble( 
    0, NeedCount* 
    10.1); 
    
21                      case TypeCode.String:     return RandomHelper.GetRandomString(( 
    int )(fild.Length*RandomHelper.GetRandomDouble ( 
    0.2, 
    0.7))); 
    
22                      case TypeCode.UInt16:     return RandomHelper.GetRandomInt( 
    1,UInt16.MaxValue );                      
    
23                      case TypeCode.UInt32:     return RandomHelper.GetRandomInt( 
    1,NeedCount * 
    50);                           
    
24                      case TypeCode.UInt64:     return RandomHelper.GetRandomInt( 
    1,NeedCount* 
    100); 
    
25                      default:     
26                          return      string.Empty; 
    
27


RandomHelper这个常用类大家都有,也比较简单,就不贴了,就是这个思路。

4.改进