最近在作一個項目,多是由於要數據對齊,一開始把數據庫全部的字符全都定義成了固定長度的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));