c# - 如何在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 字符串反序列化到对象列表中并在我的数据库中进行批量插入。我怎样才能做到这一点 ?
请帮我。如果需要更多信息,请告诉我。
谢谢你。
解决方案
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 命令进行批量插入。
推荐阅读
- javascript - Tailwind 2.0 无法在 Heroku 上构建
- android - Android Studio 4.1.1-MacOS BigSur-全屏冻结问题
- r - 如何绘制具有预测区间的多个预测估计值(线性回归)
- python - 如何在多行上将用户输入打印到 csv 文件?
- ios - 使用 Realm、Swift 保存不同的类别
- haskell - 重新定义haskell中的'all'函数
- javascript - 如何使用 jQuery 我可以找到其中没有/包含输入标签的表单?
- r - 多个模式匹配后替换数据表列中的多个值
- android - 具有 2 个实体的数据类混淆列
- python-3.x - ValueError: Input 0 is in compatible with layer average_pooling2d_1: expected ndim=4, found ndim=5