3

SQLCEを使用して複数のステートメントを実行できることは長い間真実でした。実際、私はSQL ServerCompactToolboxを使用してまさにそれを行っています。しかし、同じマルチステートメントコマンドを取得して、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]

私が使用しているSQLCEライブラリのバージョンは、バージョン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プラットフォームインストーラーは私が最新のものを持っていると言っています(それで本当に最新ですか?)。考え?

4

2 に答える 2

7

実際には、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);
                }
            }
        }
于 2012-12-02T13:01:49.900 に答える
0

この問題を解決するために小さなライブラリを作成しました。1つのコマンドを複数のサブコマンドに分割し(ステートメントの区切り文字としてセミコロン(;)を使用)、それらを1つずつ実行します。

于 2014-02-26T16:17:17.713 に答える