다중 문과 일치하지 않는 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 라이브러리는 잘못된 런타임과 비슷하지만 웹 플랫폼 설치 프로그램에 최신 (실제로 최신 버전이 있습니까?)이라고 나와 있습니다. 생각?

수락 된 답변

실제로 SQL Server Compact를 사용하여 일괄 처리 당 하나의 명령문 만 실행할 수 있습니다 (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);
                }
            }
        }

인기 답변

이 문제를 해결하기 위해 작은 라이브러리 를 만들었습니다. 하나의 명령을 여러 개의 하위 명령으로 분할하고 (명령문 구분자로 세미콜론 (;) 사용) 하나씩 명령을 실행합니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.