3

长期以来,您可以使用 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 库似乎是错误的运行时,但网络平台安装程序说我有最新的(所以那真的是最新的吗?)。想法?

4

2 回答 2

7

实际上,您只能使用 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);
                }
            }
        }
于 2012-12-02T13:01:49.900 回答
0

我创建了一个小型库来解决这个问题。它将单个命令拆分为多个子命令(使用分号 (;) 作为语句分隔符)并逐个执行它们。

于 2014-02-26T16:17:17.713 回答