好久没写代码了,这段时间突然又给自己找事情,做了个扩展性强的CS系统框架。因为太久没写代码,敲代码的速度变慢了,但是思维更加清晰了,这也算是无心插柳吧。
系统使用mysql数据库,因为没有许可证,我怕····
驱动方面,我没有采用mysql.data,因为用那个东西,代码就无法扩展的很好,我用的system.data.common中的db那一套。
链接方式我使用的是UDL或者DSN,因为懒得写链接字符串之类的,但是可以很方便的拓展。
下面是几点记录:
1.连接字符串形式:DSN=XXXX,如果是ODBCAD32中的配置,直接写名字,如果是UDL文件,直接写上文件的绝对路径
2.odbc中的传输command参数,sql语句中只能用?的方式,与sqlclient那一套不太一样。比如 select * from table1 where tabkey=?,参数中的名称不用添加@或者?之类的前缀,直接用字符串就可以了,这样也方便查询存储过程的out参数。有一点注意,?的顺序与参数的添加顺序千万要一致,一致!
3.mysql中有很多的字段类型,odbc中没有相同名字的类型,这就需要慢慢试了(如果你对mysql的字段类型不是很熟悉的话)。目前我安装的mysql 64 位的数据库,int类型就是对应的int32,varchar对应的就是string(仅对in的参数有用,对out的参数没用),blob之类的byte数组对用的是binary。
4存储过程调用,必须采用“call xxx ?,?”的形式,如果out的参数是varchar,或者text,那么我暂时没找到办法对应,只能讲varchar和text在存储过程中替换成为blob类型,然后使用encoding转换得到string,我的mysql是utf8格式的,那么我的encoding采用的也是utf8格式的转换
5.mysql的安装,我的os是win7 64bit,但是我要部署的环境是32bit 的,因此我安装的32的mysql,驱动也是32bit的,这样就出了个问题,odbcad32中的驱动没办法使用32bit的,因为os是64的。后来发现64bit系统win7的odbcad32(32bit)位于windows/syswow64下面,win7 64的环境变量中默认的odbcad32是windows/system32下面的64bit的odbcad32,被坑了大半天,才找到原因,特此记录。
暂时就这么多,想到再更新。对了, 程序语言采用的是C#