2011-12-09 2 views
0

, например:Как запустить пакетные запросы в sql ce?

StringBuilder query = new StringBuilder(); 

        foreach (KeyValuePair<string, string> key in list) 
        { 
         string name = key.Key; 
         string emails = key.Value; 
         query.AppendFormat("insert into contacts(name, emails) values('{0}', '{1}');", name, emails); 
        } 

    string queries = query.ToString(); //how to run it? 

это возможно?

+0

Немного вводящий в заблуждение заголовок Я думаю ... Вы хотите, чтобы пакет вставлял список вещей или получал несколько наборов данных из серии избранных? – Martin

ответ

1

Ваш лучший вариант - начать транзакцию перед циклом, выполнить каждое утверждение, а не добавлять его в stringbuilder, и зафиксировать после цикла (или каждого n числа записей).

Кроме того, вы должны использовать параметризованные команды, что-то вдоль линий:

SqlCeCommand oCommand = conn.CreateCommand(); 
oCommand.CommandText = "insert into contacts(name, emails) values(?, ?)"; 
// I can't remember if the param names need @ or not 
oCommand.Parameters.Add("@name", SqlDbType.VarChar); 
oCommand.Parameters.Add("@email", SqlDbType.VarChar); 

SqlCeTransaction oTrans = conn.BeginTransaction(); 
try { 
    foreach (KeyValuePair<string, string> key in list) { 
    oCommand.Parameters[0].Value = key.Key; 
    oCommand.Parameters[1].Value = key.Value; 
    oCommand.ExecuteNonQuery(); 
    } 
    oTrans.Commit(); 
} catch (Exception ex) { 
    oTrans.Rollback(); 
} 

В качестве альтернативы, вы можете использовать SQL Compact Bulk Insert Library из CodePlex. Я считаю, что это использует TableDirect SqlCeCommand поверх SqlCeResultSet, который должен обойти процессор запросов и быть примерно таким же быстрым, как вы можете получить.

+0

гул, я сделал это, я ищу альтернативу этому. –

+0

Обновлен с дополнительной опцией. –

1

Это не поддерживается в V3.5 компактного издания. Не уверен, изменился ли он на V4.

Открытие соединения/транзакции и цикл - ваш единственный вариант.

Извините, это плохие новости!

+0

Это не изменилось. Он по-прежнему не поддерживается. – codekaizen

Смежные вопросы