SQL Server Compact быстрая вставка данных данных? C # - PullRequest
0 голосов
/ 11 января 2012

Я использую SQL Server Compact Edition.

У меня есть цикл FOR для построения моих запросов на вставку данных, поэтому я загружаю 3000 строк с полноценного SQL Server.

Мне нужно вставить эти 3000 строк в SQL Server Compact Edition, и в настоящее время я делаю вставку для каждой строки, которая занимает много времени. Мне нужно сделать это для 12 таблиц, и это займет очень много времени ... Мне нужен более быстрый способ сделать это менее чем за 5 минут ...

Знаете ли вы, как можно вставить много строк в SQL Server Compact?

Я пытался вставить пятьдесят на пятьдесят, но получил ОШИБКУ ...

insert into table(col1,col2) 
values (val1,valo2) ; 
insert into table(col1,col2) 
values (val1,valo2) 

Я получил ошибку при 2 вставках (поэтому я не смог сделать 50 вставок),

Можно ли сделать OPENROWSET в SQL Server Compact Edition?

МОЙ ВОПРОС
Как я могу вставить много строк в базу данных SQL Server Compact Edition? Я получаю эти данные из полноценной базы данных SQL Server.

Ответы [ 2 ]

3 голосов
/ 11 января 2012

знаете ли вы какой-нибудь способ вставить много строк в sql compact?

См. Ниже то, что я считаю лучшим решением, но если вы этого не сделаетекак (по любой причине) и вашей исходной базой данных является SQL Server, вы можете подумать о создании связанного сервера в SQL Server с вашей компактной базой данных и разрешении SQL Server вставлять записи.Исходя из моего опыта, SQL Server вставляет в произвольные базы данных довольно быстро.

Библиотека компактной массовой вставки SQL

.NET Библиотека для быстрой загрузки данных (выполнение массовых вставок) в файл базы данных SQL Server Compact.Попытки имитировать SQLClient SqlBulkCopy API.

Некоторые моменты времени при тестировании - загрузить таблицу из 2 столбцов без ограничений / индексов:

1 000 000 строк: 6 секунд = 166 666 строк / секунду
5 000 000 строк: 28 секунд = 178 000 строк в секунду

private static void DoBulkCopy(bool keepNulls, IDataReader reader)
{
    SqlCeBulkCopyOptions options = new SqlCeBulkCopyOptions();
    if (keepNulls)
    {
        options = options |= SqlCeBulkCopyOptions.KeepNulls;
    }
    using (SqlCeBulkCopy bc = new SqlCeBulkCopy(connectionString, options))
    {
        bc.DestinationTableName = "tblDoctor";
        bc.WriteToServer(reader);
    }
}
1 голос
/ 12 января 2012

Вставка 3000 строк в 12 таблиц с использованием простых операторов SQL занимает менее секунды. Если вы получаете ошибки, или это занимает минуты, вы делаете что-то не так. Это очень простая задача, если вы получаете ошибки, вы должны выяснить, в чем дело, а не пытаться использовать другие инструменты.

Самый простой способ вставить записи в базу данных SQL CE с использованием C # - это использовать ADO.NET. Вот пример использования параметризованных запросов:

using (var conn = new SqlCeConnection(YourCommandString))
{
    var cmd = conn.CreateCommand();
    cmd.CommandText = "INSERT INTO table (col1,col2) VALUES (@val1,@val2)";

    var param1 = cmd.CreateParameter();
    param1.ParameterName = "@val1";
    // assign col1 types, constraints, lengths here.
    cmd.Parameters.Add(param1);

    var param2 = cmd.CreateParameter();
    param2.ParameterName = "@val2";
    // assign col2 types, constraints, lengths here.
    cmd.Parameters.Add(param2);

    cmd.Prepare();
    conn.Open();
    foreach (var s in sourceDataStructure)
    {
        param1.Value = s.sourceValue1;
        param2.Value = s.sourceValue2;
        cmd.ExecuteNonQuery();
    }

    cmd.Dispose();
}

если вы не знаете, что такое параметризованный запрос, вам следует изучить.

...