複数のステートメントと一貫性のないSQL CE

dapper sql-server-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ライブラリは間違った実行時間のようですが、Webプラットフォームのインストーラには最新のものがあると言われています(実際は最新ですか?)。思考?

受け入れられた回答

実際には、SQL Server Compactを使用してバッチごとに1つのステートメントしか実行できません(SQL Server Compact Toolboxの作成者です)、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);
                }
            }
        }

人気のある回答

私はこの問題を解決するための小さな図書館を作りました。 1つのコマンドを複数のサブコマンドに分割し(セミコロン(;)をステートメントセパレータとして使用)、それらを1つずつ実行します。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ