以前都是拿AR訪問Sql Server的, 工作的一直很好. 最近資料庫換成Oracle 8i了, 使用AR訪問時遇到了幾個小問題, 現把問題描述和解決方案提供出來, 希望給遇到同樣問題的朋友一些協助.
[1] Primary Key映射屬性:
要設為Sequence或者Native, 而不是Identity, 這個提醒一下大家.
例如: (表中的Id類型為Number) [PrimaryKey(PrimaryKeyType.Sequence, "id")]
public int Id
{
get { return this.id; }
set { this.id = value; }
}
[2] varchar2類型的映射:
把string類型映射到表中的varchar2類型的時候, 映射的時候要在映射屬性中標明映射到AnsiString, 否則一旦涉及到更新操作就會報告這個異常: "ORA-12704: 字元集不匹配".
例如:(表中的Name類型為varchar2) [Property("xm", ColumnType = "AnsiString")]
public string Name
{
get { return this.name; }
set { this.name = value; }
}
[3] 執行HQL語句報告"ORA-12704: 字元集不匹配"異常:
儘管在[2]步中已經設定映射到AnsiString, 但是在執行HQL查詢(SimpleQuery)的時候還是會報告這個異常.
後來發現只要採用傳參形式的SimpleQuery就會出現這個異常, 而採用字面字串的形式就沒有任何問題, 因此解決的方法就是就是改用醜陋的字串串連方式,
例如:(注釋掉的那一行執行的時候就會報告異常) public static TUser FindByName(string _name)
{
SimpleQuery query = new SimpleQuery(typeof(TUser), @"from TUser user where user.Name = '" + _name + "'");
// SimpleQuery query = new SimpleQuery(typeof(TUser), @"from TUser user where user.Name = ?", _name);
return ((TUser[])(ExecuteQuery(query)))[0];
}
最後:
由於我做的只是一個小的系統, 肯定還有其它一些問題我沒發現, 暫時就發現這麼多.
同時我一直在懷疑是不是我的Oracle 8i字元集沒設好? 或者有什麼其它的原因? (本人系Oracle菜菜...) 還懇請大家指點~~