The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
posts - 305, comments - 1913, trackbacks - 76, articles - 3
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

这几天有些空闲,写了个生成insert脚本的小东东,用来给数据库中初始化信息。没有包括生成表的,是因为数据库设计工具都已经有这个功能了。这几天也有不少关于生成sql脚本的随笔了,因为是自己来用,所以考虑的不多。只要实现自己想要的功能就可以了。代码在这里
InitInsertSqlScript.rar
写的不好,特别是数据库访问上,感觉还有很大改进的余地。考虑到表之间的主外键约束关系,先对表名进行排序后再生成,在取关联表名和判断是否外键时使用字符串比较,不够安全。请大家指教,欢迎板砖。

其实写这篇随笔主要还是想写写在开发过程中使用NUnit测试的一点感受。从三个方面来说:
一:程序结构
本来界面和支持类是在一个工程中的。但是由于把测试类单独放在了一个工程中(从一些开源项目里学的),工程间的引用出了问题(测试工程是dll,不能引用exe)。主界面所在的工程是exe的,为了测试就只好先把工程改成了输出dll。后来感觉来回改还是很麻烦,就把仅有的一个窗体提出来放在一个工程中。这样整个解决方案就成了三个工程:支持库,界面,测试。把UI和支持库分离,这也算是单元测试对程序结构所起到的作用吧。
二:性能
刚开始写的时候有意忽略了性能问题。例如在返回数据时直接用DataSet。在基本功能都已实现后,开始作优化,首先把能替换的DataSet都替换成DataReader,测试时间从3.9秒缩短到3.4秒。但是这还不是关键的。在把拼接生成脚本时对string的操作替换成StringBuilder后,时间一下缩短到0.9秒左右。
三:开发效率:
虽然写测试代码可能要花费一些时间,但是在对支持类库经过测试后,自己更有信心,暴露了问题,提高了代码质量,更提高了开发效率

虽然不是有意的使用测试驱动的方法,但是单元测试在开发过程中起到的作用是可以切身体会到的。

Feedback

#1楼    回复  引用  查看    

2005-08-06 13:43 by 灵感之源      
StringBuilder也不理想的,因为数据有可能很大量,会造成out of memory

#2楼    回复  引用  查看    

2005-08-09 09:51 by 开源中的灵感之源      
SmartForge-智能工厂 2005预览版:自动化生成数据库文档、SQL脚本、实体类等,支持多种数据库

http://www.smartpim.com

#3楼    回复  引用  查看    

2005-08-09 19:44 by Cure      
我就是担心生成的文件太大,所以就直接把blob对象忽略了,呵呵
我的这个东东其实就是自娱自乐而已,这方面的东西太多了:)
楼上的东西实在是很棒的

#4楼    回复  引用  查看    

2005-08-13 21:00 by 灵感之源      
对northwind数据库排序(当列表是按表名排序获取了的),则死循环。

不知道你是否有更好的方法?

#5楼    回复  引用  查看    

2005-08-16 19:14 by Cure      
今天调试后发现,是因为northwind里的employees表,这个表上有个自关联的外键
在对表名排序的时候,判断主表是否都已经加入列表,会认为主表还没有加入,所以
Employees表始终通不过,造成死循环。
在对表名排序的时候加一个判断,如果关联的表名等于自己的表名,就添加到已经排序过的表列表中

但是还有问题,就是自关联的表生成的插入语句顺序是错的。还要考虑对这些记录进行排序。

我考虑即使这样问题还是不能彻底解决,如果多个表中的关联有循环怎么办呢?
只能寄希望于数据库设计者吗?

#6楼    回复  引用    

2007-07-27 08:09 by abc [未注册用户]
哈哈,不错不错,我正在找这样的工具。

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-12 18:41 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: