C#.net使用npgsql批量写入数据入库到postgresql数据库
2023-12-13 14:30:04
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;
}
文章来源:https://blog.csdn.net/yinchoushi8780/article/details/134847736
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!