Sql 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 (среда выполнения v4.0.30319).

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

2 ответа

Решение

На самом деле вы можете выполнить только один оператор на пакет с помощью SQL Server Compact, и все, что я делаю (я являюсь автором инструментария SQL Server Compact), это разделение строки на 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);
                }
            }
        }

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

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