Sql CE несовместим с несколькими заявлениями

dapper sql-server-ce

Вопрос

Долгое время было верно, что вы можете выполнять несколько операторов с SQL CE . И на самом деле я использую SQL Server Compact Toolbox, чтобы сделать именно это. Но когда я беру те же команды с несколькими операторами и выполняю их из Dapper ...

public const string SampleDml = @"
   INSERT INTO [Plugin](Name, TypeName) VALUES ('Blog','Shroom.Blog');
   GO
   INSERT INTO [ContentDef](PluginID, Name, Placement, IsStatic) VALUES(@@IDENTITY,'MyBlog','Layout:Left',1);
   GO
";

Затем я получаю эту ошибку:

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

Версия используемой библиотеки SQL CE - это версия 4.0.0.0 (версия исполнения v2.0.50727). Я использую Dapper 1.12.0.0 (версия исполнения v4.0.30319) и Dapper Extensions 1.3.2.0 (runtime v4.0.30319).

Библиотека SQL CE кажется неправильной во время выполнения, но установщик веб-платформы говорит, что у меня есть последняя (так что это действительно последняя?). Мысли?

Принятый ответ

Фактически вы можете выполнять только один оператор за пакет с SQL Server Compact, все, что я делаю (я являюсь автором SQL Server Compact Toolbox), разделяет строку на GO и новую строку.

У меня такой код:

        using (StringReader reader = new StringReader(script))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                line = line.Trim();
                if (line.Equals("GO", StringComparison.OrdinalIgnoreCase))
                {
                    RunCommand(sb.ToString(), dataset);
                    sb.Remove(0, sb.Length);
                }
                else
                {
                    sb.Append(line);
                    sb.Append(Environment.NewLine);
                }
            }
        }

Популярные ответы

Я создал небольшую библиотеку для решения этой проблемы. Он разбивает одну команду на несколько подкоманд (используя semicolon (;) в качестве разделителя операторов) и выполняет их по одному.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему