最近在作一个项目,多是由于要数据对齐,一开始把数据库全部的字符全都定义成了固定长度的Char类型,这样致使长度不足的数据包含N多空格,在作测试Demo的时候就发现各类不爽了,不少能够在PLSQL里欢快的SQL用程序跑的话一准各类迷茫,如今整理总结一下,前车可鉴吧: (环境是VS2010 .net 4.0 和ORacle 10G)sql
1.Oracle 字段Char定义时,若是包含空格,应该Trim后在使用。 假定一个char 类型的开头或者结尾字段包含一个或多个空格,代码中应该也保证这些空格的存在,特别是查询的时候。数据库
苦逼的是俩句话在PL——SQL中效果是同样的,搬进代码里就不是一个爹妈了。 例如:c#
<!-- lang: sql --> select * from PARS_EVALUATION t where t.id = 'd2887a3d-e68a-4e3a-9473-27019ba7db7 ' <!-- lang: sql --> select * from PARS_EVALUATION t where TRIM(t.id) = 'd2887a3d-e68a-4e3a-9473-27019ba7db7'
2.SQL参数设定时,对于Char类型应使用 DbType.StringFixedLength (nchar)
或者 DbType.AnsiStringFixedLength(char)
,若是非要使用 DbType.String
话,对不起就擎等着麻烦吧(遇到空格包挂)。 例如:测试
<!-- lang: c# --> _BlockName = "InsertSQL"; <!-- lang: c# --> _TargetName = "Insert"; <!-- lang: c# --> parameters.Add(new DBParameter(":V_ID", Guid.NewGuid().ToString(), DbType.AnsiStringFixedLength));