예제 #1
0
        static BulkCopyRowsCopied OracleMultipleRowsCopy3(MultipleRowsHelper helper, IEnumerable source)
        {
            helper.StringBuilder
            .AppendFormat("INSERT INTO {0}", helper.TableName).AppendLine()
            .Append("(");

            foreach (var column in helper.Columns)
            {
                helper.StringBuilder
                .AppendLine()
                .Append("\t")
                .Append(helper.SqlBuilder.Convert(column.ColumnName, ConvertType.NameToQueryField))
                .Append(",");
            }

            helper.StringBuilder.Length--;
            helper.StringBuilder
            .AppendLine()
            .AppendLine(")")
            ;

            helper.SetHeader();

            foreach (var item in source)
            {
                helper.StringBuilder
                .AppendLine()
                .Append("\tSELECT ");
                helper.BuildColumns(item, _ => _.DataType == DataType.Text || _.DataType == DataType.NText);
                helper.StringBuilder.Append(" FROM DUAL ");
                helper.StringBuilder.Append(" UNION ALL");

                helper.RowsCopied.RowsCopied++;
                helper.CurrentCount++;

                if (helper.CurrentCount >= helper.BatchSize || helper.Parameters.Count > 10000 || helper.StringBuilder.Length > 100000)
                {
                    helper.StringBuilder.Length -= " UNION ALL".Length;
                    helper.StringBuilder
                    .AppendLine()
                    ;
                    if (!helper.Execute())
                    {
                        return(helper.RowsCopied);
                    }
                }
            }

            if (helper.CurrentCount > 0)
            {
                helper.StringBuilder.Length -= " UNION ALL".Length;
                helper.StringBuilder
                .AppendLine()
                ;
                helper.Execute();
            }

            return(helper.RowsCopied);
        }
예제 #2
0
        BulkCopyRowsCopied MultipleRowsCopy2 <T>(
            DataConnection dataConnection, BulkCopyOptions options, IEnumerable <T> source)
        {
            var helper = new MultipleRowsHelper <T>(dataConnection, options, options.KeepIdentity ?? false);

            helper.StringBuilder.AppendFormat("INSERT INTO {0} (", helper.TableName);

            foreach (var column in helper.Columns)
            {
                helper.StringBuilder
                .Append(helper.SqlBuilder.Convert(column.ColumnName, ConvertType.NameToQueryField))
                .Append(", ");
            }

            helper.StringBuilder.Length -= 2;

            helper.StringBuilder.Append(") VALUES (");

            for (var i = 0; i < helper.Columns.Length; i++)
            {
                helper.StringBuilder.Append(":p" + (i + 1)).Append(", ");
            }

            helper.StringBuilder.Length -= 2;

            helper.StringBuilder.AppendLine(")");
            helper.SetHeader();

            var list = new List <T>(31);

            foreach (var item in source)
            {
                list.Add(item);

                helper.RowsCopied.RowsCopied++;
                helper.CurrentCount++;

                if (helper.CurrentCount >= helper.BatchSize)
                {
                    if (!Execute(dataConnection, helper, list))
                    {
                        return(helper.RowsCopied);
                    }

                    list.Clear();
                }
            }

            if (helper.CurrentCount > 0)
            {
                Execute(dataConnection, helper, list);
            }

            return(helper.RowsCopied);
        }
예제 #3
0
        static BulkCopyRowsCopied OracleMultipleRowsCopy2(MultipleRowsHelper helper, IEnumerable source)
        {
            helper.StringBuilder.AppendFormat("INSERT INTO {0} (", helper.TableName);

            foreach (var column in helper.Columns)
            {
                helper.StringBuilder
                .Append(helper.SqlBuilder.Convert(column.ColumnName, ConvertType.NameToQueryField))
                .Append(", ");
            }

            helper.StringBuilder.Length -= 2;

            helper.StringBuilder.Append(") VALUES (");

            for (var i = 0; i < helper.Columns.Length; i++)
            {
                helper.StringBuilder.Append(":p" + (i + 1)).Append(", ");
            }

            helper.StringBuilder.Length -= 2;

            helper.StringBuilder.AppendLine(")");
            helper.SetHeader();

            var list = new List <object>(31);

            foreach (var item in source)
            {
                list.Add(item);

                helper.RowsCopied.RowsCopied++;
                helper.CurrentCount++;

                if (helper.CurrentCount >= helper.BatchSize)
                {
                    if (!Execute(helper, list))
                    {
                        return(helper.RowsCopied);
                    }

                    list.Clear();
                }
            }

            if (helper.CurrentCount > 0)
            {
                Execute(helper, list);
            }

            return(helper.RowsCopied);
        }
예제 #4
0
        protected override BulkCopyRowsCopied MultipleRowsCopy <T>(
            DataConnection dataConnection, BulkCopyOptions options, IEnumerable <T> source)
        {
            var helper = new MultipleRowsHelper <T>(dataConnection, options, false);

            helper.StringBuilder.AppendLine("INSERT ALL");
            helper.SetHeader();

            foreach (var item in source)
            {
                helper.StringBuilder.AppendFormat("\tINTO {0} (", helper.TableName);

                foreach (var column in helper.Columns)
                {
                    helper.StringBuilder
                    .Append(helper.SqlBuilder.Convert(column.ColumnName, ConvertType.NameToQueryField))
                    .Append(", ");
                }

                helper.StringBuilder.Length -= 2;

                helper.StringBuilder.Append(") VALUES (");
                helper.BuildColumns(item);
                helper.StringBuilder.AppendLine(")");

                helper.RowsCopied.RowsCopied++;
                helper.CurrentCount++;

                if (helper.CurrentCount >= helper.BatchSize || helper.Parameters.Count > 10000 ||
                    helper.StringBuilder.Length > 100000)
                {
                    helper.StringBuilder.AppendLine("SELECT * FROM dual");
                    if (!helper.Execute())
                    {
                        return(helper.RowsCopied);
                    }
                }
            }

            if (helper.CurrentCount > 0)
            {
                helper.StringBuilder.AppendLine("SELECT * FROM dual");
                helper.Execute();
            }

            return(helper.RowsCopied);
        }