分享本次版本更新遇到的问题:
1:MSSQL:
A:timestamp 类型,存储的是二进制数据,其它数据库类型是日期,需要特殊处理。
B:识别各数据库版本号,可以通过Connection对象的ServerVersion属性获取,以前竟然没在意这个字段。
C:使用SqlBulkCopy批量,要注意数据长度问题,如果长度被截断,会引发MSSQL服务直接挂掉,很变态的结果。
D:numeric 类型木有对应的SqlDbType。
E:当where in id(1,2,3,4,...) 表达式直接上1万时,MSSQL2000直接就超时挂了,其它版本数据库正常。
F:MSSQL2000 木有Xml字段,同样也木有max相关的东西,都需要转换其它类型处理。
G:向MSSQL数据库里插二进制数据,可以这么整:
UPDATE AllType SETb5=newid(),-- b7='
2:SQLite:
A:如果字段为自增,那么这个字段必须为主键,而且只能存在这一个主键。
B:如果为自增加,数据库脚本关键字字义必须提前,不能后面定义,如:
正解的:ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,错误的:ID INTEGER AUTOINCREMENT NOT NULL,PRIMARY KEY (ID)
C:对于GUID类型的字段,由于存储结构为16进制,所以查询比较麻烦,需要进行以下的转换后,才能进行比较查询:
string gv=BitConverter.ToString(new Guid(“509e4e37-43ed-4e3d-b3bc-1c0929f0d151”).ToByteArray()).Replace(-, );
最后的 条件就变成where id=x'gv这串东西'
3:Access:
A:对于GUID,正常是where id='509e4e37-43ed-4e3d-b3bc-1c0929f0d151',但是这种条件只有在查询和删除时是正常的,更新的时候,还得这么写:
where id='{509e4e37-43ed-4e3d-b3bc-1c0929f0d151}' 所以有事没事都自己补加个括号吧。
4:MySql:
A:对于Text或Blob字段,不能设置为主键。
B:对于TinyInt字段,想用0-255,应该定义成:TinyInt(3) UNSIGNED
C:只能存在一个自增列,若存在,必须定义为主键。
D:(中文内容或注释)乱码问题还是去配置MySql安装目录下my.ini的编码。
5:Oracle:
A:对于设置为Not Null 属性的字段,不允许空值,解决的方法是一个空的字符串。
B:ORA-08002: 序列 SEQ1.CURRVAL 尚未在此会话中定义,这个问题需要先调用SEQ1.nextval。
C:对于where id in(1,2,3,4,5...) 最大表达式为1000,超过这个数,需要分拆成where id in(1,2,..1000) or id in(1001,1002...2000)...
D:批量执行多条语句时,一般可以用:
begin 语句1; 语句2; 语句3;end;
但是也有用不了的时候,比如语句是comment on column 表.字段 is 说明。解决的方法是分折成一条一条执行了。
河北快3APP