Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Npgsql将批量数据导入数组字段_C#_Postgresql_Npgsql - Fatal编程技术网

C# 使用Npgsql将批量数据导入数组字段

C# 使用Npgsql将批量数据导入数组字段,c#,postgresql,npgsql,C#,Postgresql,Npgsql,我在PostgreSQL中有下表: +------------+----------+ | Column | Type | +------------+----------+ | name | text | | keywords | text[] | +------------+----------+ 我想在其中插入很多行,但我不知道如何将数据插入数组字段。使用BeginTextImport不起作用,因为Text

我在PostgreSQL中有下表:

+------------+----------+                   
|   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
会出现一个错误:“无法关闭写入程序,一行仍在进行中,请先结束它。”

如何将数据大容量复制到数组字段中?

如何?它引用了您可以使用的内容(我自己没有使用过它,所以我无法对此发表评论)

如果你不想获得额外的依赖,你至少可以看看它在引擎盖下的功能。

那怎么办?它引用了您可以使用的内容(我自己没有使用过它,所以我无法对此发表评论)


如果您不想获得额外的依赖项,您至少可以查看它在引擎盖下的功能。

错误“无法关闭writer,一行仍在进行中,先结束它NpgSql”,可能是因为您使用的writer.Write项目数少于预期的列数。

错误“无法关闭writer,一行仍在进行中,请先结束NpgSql”,这可能是因为您使用的writer.Write项的数量少于预期的列数。

谢谢!额外的依赖关系确实是一个问题,但基于此库的实现方式,我注意到我可以更好地使用BinairyImport。它仍然不起作用(请参阅我的更新)但我确信这是迈向解决方案的一步。谢谢!额外的依赖确实是一个问题,但基于此库的实现方式,我注意到我可以更好地使用BinairyImport。它仍然不起作用(请参阅我的更新)但我相信这是迈向解决方案的一步。文本导入不适合这种情况-它意味着您要负责将所有内容格式化为PostgreSQL的文本格式(分隔符和所有).我刚刚尝试了你的二进制代码示例,效果很好-你使用的是什么版本的Npgsql?你的项目列表是什么类型的?你能提交完整的源代码来重现这个问题吗?文本导入不适合这种情况-这意味着你要负责将所有内容格式化为PostgreSQL的文本格式(定界符和所有)。我刚刚尝试了你的二进制代码示例,它工作得很好-你使用的是什么版本的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