最近应公司要求,需要搞一个一键生成数据库并生成表,然后保存相关配置的小项目,前后花了两三天的时间,整个框架搭好只花了半天多,但是改BUG花了好久(欲哭无泪啊),但还是有缺陷,虽然基本上满足了要求。现在把这个小项目的开发过程及部分代码贴出,要是能帮助一些小伙伴那就再好不过了,同时也希望各位能为我提出一些建议,帮助我改良代码和解决一些小问题,在此感谢各位了。
对于Winform这一块我不是很熟悉,这个简单的UI勉强做得出来。包括选择程序的安装目录,还有连接数据库的信息,两个按钮一个进度条一个显示框。
1、对于连接数据库,很简单,若存在该数据库,则提示是否覆盖,若不存在该数据库,那就直接创建该名称的数据库。
在这里,我遇到了一个很麻烦的问题,一会儿在最后贴出,希望有贵人能帮我解决这个问题。
2、第一步创建数据库完成后,需要读取脚本的内容。脚本通过SQLServer自动生成,是之前的开发人员做的,有一些地方跟我想象的不太一样 *_*。一开始,我天真的以为直接用C#与数据库交互的方法,把整个脚本的代码作为SQL语句执行应该就可以成功,可现实却是很骨感,错误一堆接着一堆。实在没办法了,我只能将脚本进行规范化,比如里面的注释我都换成了“--”这种格式,并删除空行,并删掉一些没必要的SQL语句。
然后读取脚本文件,读取每一行直到最后,中间以GO分离,取出GO中间的SQL语句,并进行筛选,最终才发现SQLServer生成了不少没用的代码,我也是醉了(应该是我现在层次不够吧,也没去研究过这个)。
3、通过上一步的筛选,已经得到了我想要的SQL语句,接下来只需遍历每一个SQL语句执行就OK了。
4、保存配置就很简单啦,把相关数据加个密保存到配置文件就好了。
代码很简单,功能也比较基础,但是问题多多,好在现在差不多解决了,如果小伙伴以后有相同或者类似的需求,可以考虑参考一下。
在这个小项目中,一直都存在着一个问题:只能执行一次,第二次再执行就会提示错误。比如说我先使用master创建了一个数据库Test,然后我使用Test执行了脚本,生成了很多表。然后我再点击一次创建,依旧是使用Test数据库,我的代码里面是如果有重名的数据库,就删除原本的再执行,但是在删除过程中会提示Test正在使用中,无法删除。
一开始我还以为是数据库独占的问题,结果发现不是;又以为是数据库连接未关闭、内存未释放,结果发现也不是。现在大概率的原因应该是数据库那边的问题,目前还未找到根源,希望有知道的小伙伴,能指点我一下,不胜感激。
声明:本头条号的所有文章都是本人一字一句码上去的,感觉挺不容易的,但是欢迎小伙伴们转发和转载,请勿用于商业用途就好。谢谢合作。
