Castle ActiveRecord 訪問 Oracle 的幾個應注意之處

來源:互聯網
上載者:User
以前都是拿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菜菜...) 還懇請大家指點~~

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.