2012-01-19 77 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創建一個NHibernate查詢,該查詢需要HQL語法,並且{guid {a033df0a-2e0c-4085-a022-e60767e402a4}}不是有效的HQL。如果你想執行一個原始的SQL查詢,你需要使用CreateSQLQuery

0

非常感謝Chris 我失去了幾個小時,只是因爲我使用了錯誤的方法。 愚蠢的我,我想知道爲什麼HQL參與了錯誤。

但不管怎麼說,我掙扎,我發現了一個解決方案來保存GUID沒有直接的SQL

解決的辦法是:

    在POCO對象
  1. ,請即GUID字符串列
  2. ,使列的值等於{guid {05E2C49C-D426-6055-0000-000000008E0D}}

,只是映射它正常。 它的工作。 我想澄清一點,我只面臨MSAccess的問題。 在我使用NHibernate的SQL Server的GUID之前,根本沒有任何問題。