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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM