zoukankan      html  css  js  c++  java
  • XCode使用记录—使用XCode自动向数据库插入测试数据

          本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html

    Newlife XCode组件相关文章目录:http://www.cnblogs.com/asxinyu/p/4329747.html

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

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

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

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

    2.功能要求

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

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

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

    3.开发过程

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

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

    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,原来是自己用错了,大石头提出来,呵呵,我顺便更新了。 

    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.改进

        如果说改进,那就是要是能够插入一些更人性化的数据就好了,呵呵,以后再考虑。写起来很简单,当然也要Xcode的支持。下面是相关网址,大家去看看:附上大石头的博客和Xcode开源网址:

    论坛:http://www.53wb.com/

    技术支持QQ群:1600800

  • 相关阅读:
    图论模型--dijstra算法和floyd算法
    灰色预测模型
    多属性决策
    层次分析法
    一元多项式
    9.8一些错误的原因
    http协议笔记(不全)
    计网笔记1.18(不全)
    数据库基本操作
    flask-数据库
  • 原文地址:https://www.cnblogs.com/asxinyu/p/2469238.html
Copyright © 2011-2022 走看看