Sql CE incohérent avec plusieurs instructions

dapper sql-server-ce

Question

Il est depuis longtemps possible d' exécuter plusieurs instructions avec SQL CE . Et en fait, j'utilise SQL Server Compact Toolbox pour faire exactement cela. Mais quand je prends les mêmes commandes multi-instructions et que je les exécute depuis 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
";

Je continue alors à recevoir cette erreur:

Une erreur s'est produite lors de l'analyse de la requête. [Numéro de ligne de jeton = 3, offset de ligne de jeton = 1, jeton en erreur = GO]

La version de la bibliothèque SQL CE que j'utilise est la version 4.0.0.0 (version d'exécution v2.0.50727). J'utilise Dapper 1.12.0.0 (version d'exécution v4.0.30319) et Dapper Extensions 1.3.2.0 (runtime v4.0.30319).

La bibliothèque SQL CE semble être une erreur d'exécution, mais le programme d'installation de la plate-forme Web indique que je dispose de la dernière version (ce qui est vraiment le dernier?). Pensées?

Réponse acceptée

Vous ne pouvez réellement exécuter qu'une seule instruction par lot avec SQL Server Compact. Tout ce que je fais (je suis l'auteur de SQL Server Compact Toolbox), c'est de fractionner la chaîne par GO et par nouvelle ligne.

J'ai un code comme celui-ci:

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

Réponse populaire

J'ai créé une petite bibliothèque pour résoudre ce problème. Il divise une seule commande en plusieurs sous-commandes (en utilisant un point-virgule (;) comme séparateur d'instructions) et les exécute une par une.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi