public void SaveResponses(BlockingCollection <T> itemsToSaveManager, Action notifyErrorAction) { try { using (NpgsqlConnection conn = new NpgsqlConnection(_connectionString)) { conn.Open(); using (NpgsqlBinaryImporter importer = conn.BeginBinaryImport($"COPY {TableName} ({Columns}) FROM STDIN (FORMAT BINARY);")) { while (!itemsToSaveManager.IsCompleted) { if (itemsToSaveManager.TryTake(out T model, 100)) { if (!ImportRow(importer, model)) { notifyErrorAction(); } } } importer.Complete(); } } } catch (Exception err) { Log.Error(err, err.ToString()); throw; } }
public static void BulkCopy(IEnumerable <T> source, NpgsqlBinaryImporter writer) { foreach (var row in source) { writer.StartRow(); PerformBulkCopyDataRow(writer, row); } writer.Complete(); }
static void Main(string[] args) { Console.WriteLine("Hello World!"); var table = new DataTable("practicetable2"); table.Columns.Add("num", typeof(int)); table.Columns.Add("numstring", typeof(string)); table.Columns.Add("description", typeof(string)); table.Columns.Add("someid", typeof(Guid)); for (int i = 0; i < 10; i++) { var row = table.NewRow(); row["num"] = i; row["numstring"] = i.ToString(); // Commented below line to test for null case. // row["description"] = "sfsdf"; row["someid"] = Guid.NewGuid(); table.Rows.Add(row); } for (int i = 0; i < table.Columns.Count; i++) { var column = table.Columns[i]; Console.WriteLine($"full name: {column.DataType.FullName}"); } using (var conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=joyn_fdgcommon_dev;User Id=postgres;Password=admin;")) { conn.Open(); using (NpgsqlBinaryImporter writer = conn.BeginBinaryImport("copy stage.practicetable2 from stdin(FORMAT BINARY)")) { for (int i = 0; i < table.Rows.Count; i++) { DataRow row = table.Rows[i]; writer.StartRow(); for (int j = 0; j < table.Columns.Count; j++) { var column = table.Columns[j]; var value = row[column.ColumnName]; if (value != null) { writer.Write(row[column.ColumnName]); } else { Console.WriteLine("writing null"); writer.WriteNull(); } } } writer.Complete(); } } }
/// <summary> /// /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="importer"></param> /// <param name="moveNext"></param> /// <param name="getCurrent"></param> /// <param name="write"></param> /// <param name="identityBehavior"></param> /// <returns></returns> private static int BinaryImportWrite <TEntity>(NpgsqlBinaryImporter importer, Func <bool> moveNext, Func <TEntity> getCurrent, Action <TEntity> write, BulkImportIdentityBehavior identityBehavior) where TEntity : class { var result = 0; while (moveNext()) { importer.StartRow(); EnsureCustomizedOrderColumn(importer, identityBehavior, result); write(getCurrent()); result++; } importer.Complete(); return(result); }
/// <summary> /// Completes the import operation. The writer is unusable after this operation. /// </summary> public void Complete() { _binaryImporter.Complete(); }
public static void PerformBulkCopy(this IDataReader dr, NpgsqlBinaryImporter writer, DataColumnCollection columns = null) { columns ??= dr.GetSchemaTable().Columns; while (dr.Read()) { writer.StartRow(); foreach (DataColumn col in columns) { switch (dr[col.Ordinal]) { case bool x: writer.Write(x); break; case byte x: writer.Write(x); break; case sbyte x: writer.Write(x); break; case short x: writer.Write(x); break; case ushort x: writer.Write(x); break; case int x: writer.Write(x); break; case uint x: writer.Write(x); break; case long x: writer.Write(x); break; case ulong x: writer.Write(x); break; case double x: writer.Write(x); break; case float x: writer.Write(x); break; case Guid x: writer.Write(x); break; case DateTime x: writer.Write(x); break; case TimeSpan x: writer.Write(x); break; case char x: writer.Write(x); break; case string x: writer.Write(x); break; case null: writer.WriteNull(); break; } } } writer.Complete(); }