C#.net使用npgsql批量写入数据入库到postgresql数据库

C#.net使用npgsql批量写入数据入库到postgresql数据库

npgsql批量存储数据

转载自:https://blog.csdn.net/liuwanying0226/article/details/130825503

1. 单条存储

当有类型限定时,例如jsonb,在单条存储时 在sql语句中使用‘@event_data::jsonb’此形式

 public async Task SaveDbAsync(PageViewTrackEventDto trackEventDto)
        {
   
            try
            {
   
                string connecstr = GetConnectionString();
                NpgsqlConnection con = new NpgsqlConnection(connecstr);
                con.Open();
                string strsql = @"INSERT INTO drp_app_track_event (start_time, duration, session_id, trace_id, parent_trace_id, event_type, event_code, action_code, user_id, user_info, event_data) VALUES 
                            (@start_time, @duration, @session_id, @trace_id, @parent_trace_id, @event_type, @event_code, @action_code, @user_id, @user_info::jsonb, @event_data::jsonb) ";
                using (NpgsqlCommand SqlCommand = new NpgsqlCommand(strsql, con))
                {
   
                    SqlCommand.Parameters.AddWithValue("@start_time", trackEventDto.start_time);
                    SqlCommand.Parameters.AddWithValue("@duration", trackEventDto.duration);
                    SqlCommand.Parameters.AddWithValue("@session_id", trackEventDto.session_id);
                    SqlCommand.Parameters.AddWithValue("@trace_id", trackEventDto.trace_id);
                    SqlCommand.Parameters.AddWithValue("@parent_trace_id", trackEventDto.parent_trace_id);
                    SqlCommand.Parameters.AddWithValue("@event_type", trackEventDto.event_type);
                    SqlCommand.Parameters.AddWithValue("@event_code", trackEventDto.event_code);
                    SqlCommand.Parameters.AddWithValue("@action_code", trackEventDto.action_code);
                    SqlCommand.Parameters.AddWithValue("@user_id", trackEventDto.user_id);
                    SqlCommand.Parameters.AddWithValue("@user_info", JsonConvert.SerializeObject(trackEventDto.user_info));
                    SqlCommand.Parameters.AddWithValue("@event_data", JsonConvert.SerializeObject(trackEventDto.event_data));
                    SqlCommand.ExecuteNonQuery();  
                    con.Close();
                }
            }
            catch (Exception ex)
            {
   

                throw;
            }

        }

2. 批量存储

多条存储遇到类型限定,在write写入时,加入‘NpgsqlDbType.Jsonb’限定。
注:BeginBinaryImport(“copy drp_app_track_event(session_id,duration,start_time,trace_id,parent_trace_id,event_type,event_code,action_code,user_id,user_info,event_data) FROM STDIN BINARY”))
使用以上方法可以指定哪些列是需要进行数据入库的,这样可以屏蔽掉一些自增的列。
BeginBinaryImport(“copy 表名(字段名使用逗号分隔) FROM STDIN BINARY”))

   public Task SaveDbAsync(List<PageViewTrackEventDto> trackEventDto)
        {
   
            try
            {
   
                string connecstr = GetConnectionString();
                NpgsqlConnection con = new NpgsqlConnection(connecstr);
                con.Open();
                using (var writer = con.BeginBinaryImport("copy drp_app_track_event(session_id,duration,start_time,trace_id,parent_trace_id,event_type,event_code,action_code,user_id,user_info,event_data) FROM STDIN BINARY"))
                {
   
                    foreach (var record in trackEventDto) 
                    {
   
                        writer.StartRow();
                        writer.Write(record.session_id);
                        writer.Write(record.duration);
                        writer.Write(record.start_time);
                        writer.Write(record.trace_id);
                        writer.Write(record.parent_trace_id);
                        writer.Write(record.event_type);
                        writer.Write(record.event_code);
                        writer.Write(record.action_code);
                        writer.Write(record.user_id);
                        writer.Write(JsonConvert.SerializeObject(record.user_info), NpgsqlDbType.Jsonb);
                        writer.Write(JsonConvert.SerializeObject(record.event_data), NpgsqlDbType.Jsonb);
                    }

                    writer.Complete();
                }
            }
            catch (Exception ex)
            {
   
                throw;
            }

            return Task.CompletedTask;
        }

相关推荐

  1. C#.net使用npgsql批量写入数据入库postgresql数据库

    2023-12-10 14:10:03       34 阅读
  2. 批量写入数据Elasticsearch

    2023-12-10 14:10:03       32 阅读
  3. 使用Spark写入数据数据库

    2023-12-10 14:10:03       36 阅读
  4. 【Python】使用Python连接ClickHouse进行批量数据写入

    2023-12-10 14:10:03       10 阅读
  5. Spark SQL百万级数据批量写入MySQL

    2023-12-10 14:10:03       39 阅读
  6. python按列写入数据excel

    2023-12-10 14:10:03       37 阅读
  7. c# 连接数据库、excel数据批量导入数据库

    2023-12-10 14:10:03       12 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 14:10:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 14:10:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 14:10:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 14:10:03       18 阅读

热门阅读

  1. pytorch 笔记:dist 和 cdist

    2023-12-10 14:10:03       36 阅读
  2. C语言中getchar函数

    2023-12-10 14:10:03       37 阅读
  3. Codeforces Round 912 (Div. 2)补题

    2023-12-10 14:10:03       36 阅读
  4. paddle detection 怎么解析配置文件

    2023-12-10 14:10:03       29 阅读
  5. postgresql设置免密登录

    2023-12-10 14:10:03       33 阅读
  6. nodejs流

    nodejs流

    2023-12-10 14:10:03      30 阅读
  7. Linux环境FFTW源码编译 | WSL编译报错解决

    2023-12-10 14:10:03       32 阅读
  8. Electron:白话Electron开发桌面端应用

    2023-12-10 14:10:03       31 阅读
  9. K8S学习指南(4)-minikube的使用

    2023-12-10 14:10:03       37 阅读
  10. 【数据结构和算法】交替合并字符串

    2023-12-10 14:10:03       39 阅读
  11. 配置vue3+vite+eslint+prettierrc项目

    2023-12-10 14:10:03       29 阅读