2012-01-19 5 views
1

私はMSAccessに基づくレガシーデータベースを扱うC#アプリケーションを構築しています。 GUIDタイプ(数値はレプリケーションIDとして定義されています)を持つテーブルがあります。 .NET pocoをそのテーブルにマップする多くのオプションを試しましたが、成功しませんでした。 私はテーブルに挿入するだけです。 そう、私はちょうど真っ直ぐなSQL文を渡すと思った。 私はこの文を試みたが、私はMSACESSのSQLNHibernateと直接SQLを渡す

insert into message (PK_ID, To) values ({guid {a033df0a-2e0c-4085-a022-e60767e402a4}}, '[email protected]') 

の中からそれを実行した場合、それはうまく働いた。しかし、私はNHibernateはのCreateQuery.ExecuteUpdate()を使用してC#のからそれを実行したとき

私は次のエラーを取得します

HQL:メッセージに挿入(PK_ID、TO)の値({GUID {a033df0a-2e0c-4085-a022-e60767e402a4}}、 '[email protected]')

行1:41ない実行可能な代替案で文字 '{' 行1:44文字で何も実行可能な代替案は、「{」

、例外はANTLR

任意のアイデアからではありませんか?

答えて

3

CreateQueryはHQL構文を期待するNHibernateクエリを作成し、{guid {a033df0a-2e0c-4085-a022-e60767e402a4}}は有効なHQLではありません。生のSQLクエリを実行する場合は、CreateSQLQueryを使用する必要があります。

0

ありがとうクリス 間違った方法を使用したからといって、数時間も失ってしまった。 stupid私は、なぜHQLがエラーに関与しているのだろうと思っていました。私は苦労している間に

しかしとにかく、私が直接SQLなしでGUIDを保存するために解決策を見つけた

ソリューションです:

POCOオブジェクトで
  1. 、文字列のGUIDである列を作ります
  2. および列の値は、{guid {05E2C49C-D426-6055-0000-000000008E0D}}

に等しくなるだけ正常にマップすることを可能にします。 それは働いた。 私はMSAccessの問題に直面していることを明確にしたいと思います。 前に、NHibernateでSQL Serverに多くのGUIDを使用しましたが、問題はまったくありませんでした。

関連する問題