Newlife XCode组件相关文章目录:
上一篇介绍了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.改进