【问题标题】:Sql CE Inconsistent with Multiple StatementsSql CE与多条语句不一致
【发布时间】:2012-12-02 01:17:31
【问题描述】:

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

【问题讨论】:

    标签: sql-server-ce dapper


    【解决方案1】:

    您实际上只能使用 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);
                    }
                }
            }
    

    【讨论】:

    • 他们做到了,在实体框架提供者 - SqlCeMultiCommand
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多