SQL CE Inkonsistent mit mehreren Anweisungen

dapper sql-server-ce

Frage

Es ist lange wahr, dass Sie mehrere Anweisungen mit SQL CE ausführen können. Tatsächlich verwende ich die SQL Server Compact Toolbox , um genau das zu tun. Aber wenn ich dieselben Mehrfach-Anweisungsbefehle nehme und sie von Dapper aus führe ...

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
";

Ich bekomme dann immer diesen Fehler:

Beim Analysieren der Abfrage ist ein Fehler aufgetreten. [Token-Zeilennummer = 3, Token-Zeilen-Offset = 1, Token-Fehler = GO]

Die Version der SQL CE-Bibliothek, die ich verwende, ist Version 4.0.0.0 (Laufzeitversion v2.0.50727). Ich benutze Dapper 1.12.0.0 (Laufzeitversion v4.0.30319) und Dapper Erweiterungen 1.3.2.0 (Laufzeit v4.0.30319).

Die SQL CE-Bibliothek scheint die falsche Laufzeit zu sein, aber Web-Plattform-Installer sagt, ich habe die neueste (also das ist wirklich die neueste?). Gedanken?

Akzeptierte Antwort

Sie können tatsächlich nur eine einzelne Anweisung pro Batch mit SQL Server Compact ausführen, alles was ich tue (ich bin der SQL Server Compact Toolbox Autor), ist die Zeichenfolge pro GO und Newline aufgeteilt.

Ich habe Code wie folgt:

        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);
                }
            }
        }

Beliebte Antwort

Ich habe eine kleine Bibliothek erstellt , um dieses Problem zu lösen. Es teilt einen einzelnen Befehl in mehrere Unterbefehle auf (mit Semikolon (;) als Anweisungstrennzeichen) und führt sie einzeln aus.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum