折腾死了,ADO.net+MySQL

学习服务器,数据库是铁定绕不开的,选来选去,还是用了MySQL,因为原来在上海的时候用的就是这玩意儿,虽然前后总共才用过半年,毕竟还是比SQLServer熟悉一些。

结果,按照MySQL观望例子来做,ADO.NET+MySQL+NET Connector,一路绿灯,到最后,Data Grid View里就是取不出值来。输出里面显示了一个Argument Null Exception。

于是一怒之下将异常全部打开,发现先是在一开始提示了无法加载MySql.Data.Entity或它的一个依赖项(这个异常可能是被MySQL自己给捕获了,所以我在输出里根本就找不到,但其实这个才是致命的错误),因此导致了后面获取Service的时候发生了空指针异常。检查来检查去,各种Test各种试,甚至把Connector都重装了,还不行,折腾了一晚上,就没搞明白是怎么回事儿。

眼看快要休息了,终于放弃了,谷歌了一下,中文没找到资料,英文的官网倒有一个BUG报告:

http://bugs.mysql.com/bug.php?id=58181

oh my god……

立马陷入石化状态。

啥也不说了,赶快下载最新的6.3.6,安装,调试——一切正常。

当下,滔滔不绝地开始问候Oracle,邻居估计要抓狂了——隔壁的家伙,0:00啦,你还他娘的睡不睡啦?!

教训:

1 软件就一定会有BUG,就算是Oracle写的,也不能迷信呀!

2 错误不一定就是自己的,也要善于怀疑怀疑别人,特别是发现不行了要尽快查资料,要不就是钻牛角尖浪费时间了。

3 软件不一定要用最新的,不过却最好订阅一下人家的更新信息,看看人家新版里面都解决了哪些问题。

4 很奇怪,一开始的dll异常怎么会没报出来,这个没搞明白怎么回事儿。按理说NET的异常即便捕获也还是可以在输出里查询到的,但这次这个情况,一开始的无法加载dll的异常根本就没在输出里出现过,直到后面的Argument Null那里才放到了输出里?结果我看到Argument Null,一开始不看Reflector还一直以为是我的Column或者关系的设置出错了呢。后来开启了异常跟踪才发现原来杀手被庇护起来了,这才慢慢步入正轨。可是这一点是怎么做到的呢?

5给别人用的软件,catch异常很重要,但要做就要做绝,而且关键异常最好throw/rethrow。说来最后的错误也真是搞笑,6.3.5版本的Mysql.Data.entity.dll版本是6.3.5,但其引用的另一个dll,Win7x64下的版本是6.3.4,于是做了版本验证的Mysql.data.entity就理所当然地加载不了相应的DLL了,导致Mysql数据库引擎初始化的失败。感觉如果是像dll加载不了这么大的问题,最好还是能rethrow一下,这样外面立马就可以找到关键点。封闭的话,就需要保证系统本身在这种情况下依然是安全的,而且在后面的操作中能不断通过日志或什么提醒外界系统本身所隐含的危险。这点感觉MySql还是不错,毕竟没有因此导致整个MySql全盘崩溃,但是如果能rethrow一些异常出来,外界其实更容易找到问题的定位。系统的异常怎么设计,感觉也是一个大学问呀!特别是一回想到现在我们游戏的客户端各种空指针致挂,这个感叹就不由自主更大一些。

这几天大概看了看ADO.NET这套系统的设计,不得不佩服一下。接口设计的很合理,可能是因为SQL的东西就那么些,比较好抽取接口的关系,不过毕竟还是很牛的。MySQL、SQLServer、Access,不管什么数据库,直接全都无视,全都可以使用跟库没有太多关系的Dataset,DataTable,DataRow和LINQ,而且VS可以直接根据库里的表,建立出相应的类出来。

这一点感觉应该正是所谓的“先有了规则,于是就有了接口,有了接口,于是就有了扩展性”吧。因为规则定制的合理,因此也可以围绕规则来做工具了。最近这些年,也看到、也经历过把心思放在工具上,却总是很难做好——因为没有定好合适的规则,所以工具的形态也老在变,大把的时间就这样浪费了。还是规则最重要啊,毕竟是没有规矩,不成方圆呢。

本来想着这月中旬就能把卡片游戏给弄出来的,前几天修改了服务器结构加入了代理服务器(之前是Server端3个服务器全都跟客户交流,现在只有一个了,但客户端和服务器的通信代码却不需要大改,哈哈),然后就是这两天跟朋友讨论了讨论,一拍脑门,决定把原来的那套低幼的数据库组织模式给革命了。这次修改未必是完美的,但肯定比原来的好多了,不过因此也就搭进来了3天时间。

想想原来曾经独立设计过BBS的数据库和页面,那时的这些东西掌握的都应该比现在要好,要多,现在这些知识全还给老师了,心里最近是越来越失落了……好在能有朋友一起讨论,慢慢来吧。争取5-1附近能把卡片游戏的基础部分和工具部分做出来,当然,只是为了功能,很多地方都没有认真推敲,留下了一大坨TODO,性能什么的估计是惨不忍睹啦。因为没有驾驭过这样大量使用多线程和并行的经验,估计到时候也会各种BUG。不过也好,越做越发现自己的很多不足,而在学习的过程中也把之前的割裂的点慢慢都连起来了,慢慢来吧。

服务器这块儿还是比图形有意思多了,很久都没有这样能连茶饭都不管、起了床光着膀子就各种敲代码的幸福感觉了,当然能这样跟原来也不一样了,原来是一天不吃饭也不觉得饿,现在是因为有贤惠的老婆坐镇,后勤方面几乎不用去花什么精力。

能静静地在一个阴暗的角落里做自己想做的事情,不管外面如何喧闹如何咆哮,幸福可能也就是这样了吧?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值