2013-03-28 16 views
2

我有以下架構表:如何在Npgsql中使用hstore列類型?

CREATE TABLE account 
(
    id serial primary key, 
    login varchar(40) not null, 
    password varchar(40) not null, 
    data hstore 
); 

我想用一個NpgsqlCommand對象與參數檢索和帳戶數據從我的應用程序商店。我必須使用哪種DbType作爲NpgsqlParameter?枚舉NpgsqlDbType沒有hstore的值。我可以使用DictionaryHashTable作爲NpgsqlParameter對象的值嗎?

當我使用JSON專欄中,我可以創造NpgsqlDbType.Text類型的參數,使用像JSON.Net庫序列化對象的JSON字符串,併發送一條SQL語句那樣:

INSERT INTO account (login, password, data) VALUES (:login, :password, :data::json) 

不幸這不適用於hstore列。我得到一個語法錯誤,當我嘗試這樣做:

INSERT INTO account (login, password, data) VALUES (:login, :password, :data::hstore) 

我傳遞給數據參數的字符串看起來是這樣的:

「鍵1 =>‘值1’鍵2 =>「值2 「'

+2

你得到的錯誤是什麼?儘管Npgsql中沒有hstore本機數據類型,但如果您可以將hstore數據作爲字符串處理,則可以嘗試DbType.Object和/或NpgsqlDbType.Text。另外,啓用Postgresql Server日誌,或者打印NpgsqlException.ErrorSql屬性,以便我們可以看到Npgsql將哪個查詢發送到服務器。我希望它有幫助。 –

回答

1

謝謝弗朗西斯科!我在日誌中看到,當它們傳遞給PostgreSQL時,字符串開頭和結尾處的單引號(')會被轉義。當我通過

KEY1 => 「VALUE1」,KEY2 => 「VALUE2」

相反,我可以插入數據到hstore柱。

+1

太棒了!我很高興知道它現在工作正常。 –

相關問題