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);
}
}
}
Я создал небольшую библиотеку, чтобы решить эту проблему. Он разбивает одну команду на несколько подкоманд (используя точку с запятой (;) в качестве разделителя операторов) и выполняет их одну за другой.