Вставка нескольких строк в базу данных sdf-файла одной вставкой

У меня есть функция для вставки в базу данных SQL Server CE.

private void update_database(string SQL_string)
{
        DBconnection.Open();
        SqlCeCommand SQL_querry = DBconnection.CreateCommand();
        SQL_querry.CommandText = SQL_string;
        SQL_querry.ExecuteNonQuery();
        DBconnection.Close();
}

Я перехожу к этому SQL вызов строки

SQL_string = @"insert into Cities(City, destination, distance) values('liege','aberdeen','386'), ('liege','kassel','348');";
update_database(SQL_string);

и это выдает исключение:

Произошла ошибка при разборе запроса. [Номер строки токена = 1, смещение строки токена = 81, Ошибка токена =, ]"

в котором четко указано, что проблема связана с запятой после первого набора значений... Что меня больше всего смущает, так это то, что при передаче этой строки sql_string:

SQL_string = @"insert into Cities(City, destination, distance) values('liege','aberdeen','386');";

это работает без проблем.

Есть ли SqlCeCommand принимать многорядные вставки? Что мне здесь не хватает?

3 ответа

Решение

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

var SQL_string = "insert into Cities(City, destination, distance)";
SQL_string += " SELECT 'liege', 'aberdeen', '386'";
SQL_string += " UNION";
SQL_string += " SELECT 'liege', 'kassel', '348'";
update_database(SQL_string);

Вы не можете сделать это в SQL Server Compact Edition. Однако вы должны иметь возможность выполнять отдельные операторы вставки или вставлять несколько строк из производной таблицы. https://msdn.microsoft.com/en-us/library/ms174633

INSERT INTO Cities(City, destination, distance)
SELECT s.City, s.Destination, s.distance
FROM (
    SELECT 'liege' AS CITY, 'aberdeen' AS DESTINATION, '386' AS DISTANCE
    UNION ALL
    SELECT 'liege' AS CITY, 'kassel' AS DESTINATION, '348' AS DISTANCE
) s

Попробуй это;

SQL_string = @"insert into Cities(City, destination, distance) values('liege','aberdeen','386');";
SQL_string += @"insert into Cities(City, destination, distance) values('liege','kassel','348');";
update_database(SQL_string);

Небольшое примечание: если это домашнее задание или простой проект, этого может быть достаточно, но для чего-то большего я рекомендую использовать среду для работы с БД. Например; этот код подозрительно выглядит уязвимым для SQL-инъекций:)

Другие вопросы по тегам