.net使用npgsql批量写入数据

npgsql批量存储数据

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’限定

   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;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值