2016-05-11 49 views
0

我有PostgreSQL的如下表:批量數據導入陣列使用領域Npgsql的

+------------+----------+     
| Column | Type | 
+------------+----------+ 
| name  | text  | 
| keywords | text[] | 
+------------+----------+ 

我想插入一大堆行的,但我無法弄清楚如何插入數據放入數組字段中。使用BeginTextImport自TextWriter的不接受陣列不起作用:

using (var writer = connection.BeginTextImport(
    "COPY table (name, keywords) FROM STDIN DELIMITER ';'" 
)) 
{  
    foreach (var item in items) 
    { 
     writer.Write(item.Name + ";"); 
     // How to do this? 
     writer.Write(item.Keywords.ToArray(), NpgsqlDbType.Array | NpgsqlDbType.Text); 
    } 
} 

使用BeginBinaryImport給出了一個錯誤:「不能關閉的作家,一排仍在進行中,結束它Npgsql的第一」。

using (var writer = connection.BeginBinaryImport(
    "COPY table (name, keywords) FROM STDIN (FORMAT BINARY)" 
)) 
{  
    foreach (var item in items) 
    { 
     writer.StartRow(); 
     writer.Write(item.Name, NpgsqlDbType.Text); 
     writer.Write(item.Keywords.ToArray(), NpgsqlDbType.Array | NpgsqlDbType.Text); 
    } 
}// Exception thrown here 

如何將數據批量複製到數組字段中?

+0

文本導入不適合這種情況 - 這意味着您要負責格式化PostgreSQL文本格式的所有內容(分隔符和全部)。 –

+0

我剛剛試過了你的二進制代碼示例,它工作得很好 - 你使用的是什麼版本的Npgsql?你的物品清單究竟是什麼類型?你能否提交重現此問題的完整源代碼? –

回答

2

this怎麼樣?它引用了this library,你可以使用它(我自己沒有使用它,所以我不能評論它)。

如果你不想採取額外的依賴,你至少可以看看它在底層做了什麼。

+0

謝謝!額外的依賴關係確實是一個問題,但基於這個庫的實現方式,我注意到我可以更好地使用BinairyImport。它仍然無法正常工作(請參閱我的更新),但我相信這是邁向解決方案的一步。 – Xatoo