Esempio n. 1
0
        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;
            }
        }
Esempio n. 2
0
        public static void BulkCopy(IEnumerable <T> source, NpgsqlBinaryImporter writer)
        {
            foreach (var row in source)
            {
                writer.StartRow();
                PerformBulkCopyDataRow(writer, row);
            }

            writer.Complete();
        }
Esempio n. 3
0
        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);
        }
Esempio n. 5
0
 /// <summary>
 /// Completes the import operation. The writer is unusable after this operation.
 /// </summary>
 public void Complete()
 {
     _binaryImporter.Complete();
 }
Esempio n. 6
0
        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();
        }