Помогите с массовой / пакетной вставкой в ​​Sybase из XML с помощью .NET - PullRequest
2 голосов
/ 22 февраля 2011

Я хочу вставить тысячи записей в базу данных Sybase . Есть ли хороший инструмент, который поможет мне управлять массовыми вставками с помощью .NET?

Записи приходят в виде XML-сообщения на мой веб-сервис. В веб-сервисе мне нужно загрузить эти записи в базу данных Sybase и отправить обратно статус загрузки.

Ответы [ 3 ]

1 голос
/ 22 февраля 2011

Думаю, вам может понадобиться BCP

bcp database_name.owner.table_name в файле данных -n -U username -P пароль

Связь Sybase BCP

Однако вам может понадобиться сначала записать записи в файл, а затем использовать класс Process для выполнения BCP для файла, который вы только что написали.

AFAIK, в Sybase нет эквивалента SqlBulkCopy

0 голосов
/ 01 марта 2011

Я сделал что-то подобное, и это помогло значительно сократить время загрузки,

    public static void InsertModelValueInBulk(DataSet employeData, int clsaId, int batchSize)
    {
        string[] insertStatement = new string[batchSize];
        using (var connection = GetOdbcConnection())
        {
            connection.Open();
            var tran = connection.BeginTransaction();
            try
            {
                int j = 0;
                for (int i = 0; i < employeData.Tables[0].Rows.Count; i++)
                {
                    var row = employeData.Tables[0].Rows[i];
                    var insertItem = string.Format(@"select '{0}',{1}", row["name"], Convert.ToInt32(row["ID"]);
                    insertStatement[j] = insertItem;
                    if (j % (batchSize-1) == 0 && j > 0)
                    {
                        var finalQuery = @" INSERT INTO employee (id, name)
                                         " + String.Join(" union ", insertStatement);
                        using (var cmd = new OdbcCommand(finalQuery, connection, tran))
                        {
                            cmd.ExecuteNonQuery();
                        }
                        j = 0;
                        continue;
                    }
                    else
                    {
                        j = j + 1;
                    }
                }

                if (j > 0)
                {
                    var finalQuery = @"INSERT INTO employee (id, name)
                                     " + String.Join(" union ", insertStatement,0,j-1);
                    using (var cmd = new OdbcCommand(finalQuery, connection, tran))
                    {
                        cmd.ExecuteNonQuery();
                    }
                }
                tran.Commit();
            }
            catch
            {
                tran.Rollback();
                throw;
            }
        }
    }
0 голосов
/ 23 февраля 2011

Если вам нужно вставить только тысячи записей, не беспокойтесь о массовой загрузке. Обычная старая пакетная вставка выполняет эту вставку за несколько секунд.

Веб-служба .NET с BCP - слишком сложное решение. Попробуйте BCP, если вам нужно вставить более миллиона записей.

...