首页 > 解决方案 > 如何在postgresql中将数据表作为参数传递?

问题描述

我想将 dataTable 作为参数传递给 postgresql 函数。

public void InsertDataInBulk(DataTable dataTable, string functionName ,ILogger logger) 
        {
            try
            {
                var connection = _dbConnect.OpenConnection(logger);
                DbCommand command = connection.CreateCommand();
                command.CommandText = "f_testbulkinsert";
                command.CommandType = CommandType.StoredProcedure;
                if (dataTable != null)
                {
                    var parameter = command.CreateParameter();
                    parameter.ParameterName = "testtype";
                    parameter.Value = JsonConvert.SerializeObject(dataTable, Formatting.Indented);
                    command.Parameters.Add(parameter);
                }
                _dbConnect.CloseConnection(connection, logger);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, ex.Message);
                throw;
            }
        }

Here is my postgresql function.

CREATE OR REPLACE FUNCTION public.f_testbulkinsert(
    testtype varchar)
    RETURNS void
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
BEGIN
  
END;
$BODY$;

我试图通过序列化将数据表作为postgreSql函数中的参数传递(这是我能在postgresql中找到工作的唯一方法)。我只想将 json 字符串反序列化到对象列表中并在我的数据库中进行批量插入。我怎样才能做到这一点 ?

请帮我。如果需要更多信息,请告诉我。

谢谢你。

标签: c#.netpostgresqlasp.net-coreado.net

解决方案


PostgreSQL 支持以下格式的多个插入语句。

    INSERT INTO LaptopBrand (Id,Name,Country) VALUES
        (1, 'Lenovo', 'CHINA'),
        (2, 'Apple', 'US'),
        (3, 'HP','US');

您可以使用 StringBuilder 构建插入命令并执行它。

此外,官方PostgreSQL 文档建议使用Copy而不是 insert 语句进行批量插入。

如果您使用 Npgsql 从您的 .net 项目连接到 Postgres,那么您可以执行Copy 命令进行批量插入。


推荐阅读