SQL에 상당히 익숙하며 SQL 스크립트에 혼란을 야기하는 키워드에 문제가 있습니다. C#에서 premade .sql 스크립트 파일 목록을 실행하려고합니다. 나는 현재 파일을 문자열로 읽고 command.ExecuteNonQuery()로 실행하고있다. 이 스크립트의 가장 위대한 작품,하지만 난 실수로 키워드를 포함하는 하나의 실행 해요 : 그것은 그 명령이 실패 GO 칠 때, 기본적으로SQL 스크립트 데이터가 프로그래밍 방식으로 실행될 때 문제를 일으키는 키워드 - C#
INSERT INTO [thetable]
SELECT '123123', 'abcabc', 'I WANT TO GO TO BED'
UNION ALL
SELECT '123124', 'abcdef', 'SOOO TIRED'
.
필자는 이러한 삽입 파일을 작성하는 책임이 있으므로 어떤 방식 으로든 다시 포맷해야하는 경우 가능합니다. 그러나 그 안에있는 데이터는 협상 할 수 없습니다. 또한, 많은 행이있는 파일에서로드하고 있기 때문에 매개 변수화를 피하기 위해 실행 가능하지 않습니다.
이 시점에서 도움을 주시면 감사하겠습니다. 고마워요!
편집이 정보 추가 :
명확히하기 위해, 실제 문자열은 더 'ASVFDS4 + 23eF3da34sddsdf3d3t4g ... 100charslater ... sd5OAyGOsiISIssdsd/sNUIGsdisd354f'같은 것입니다. 5OAy 즉시 GOsiIS 뒤에 것을
"Unclosed quotation mark after character string 'ASVFDS4+23eF3da34sddsdf3d3t4g...100charslater...sd5OAy'
참고 ..., 이동 실제로 명령으로 읽어되고 있음을 믿고 저를 인도한다 : 나는 시도하고 명령을 실행할 때, 나는 말한다 예외를 잡을 그 명령 전에 문자열의 끝을 예상하게합니다. 나는 또한 명확히해야 .NET 3.5
편집 2 실행
는, 나는 현재 실제 GO 문에 분할 및 개별적으로 명령을 실행하고 있습니다.
즉
USE MyDatabase
GO
INSERT INTO [thetable]
SELECT '123123', 'abcabc', 'I WANT TO GO TO BED'
UNION ALL
SELECT '123124', 'abcdef', 'SOOO TIRED'
UNION ALL
...
SELECT '123189', 'abcabc', 'HAD SOME SLEEP'
GO
스플릿, 그래서 I 별도로
USE MyDatabase
및
INSERT INTO [thetable]
SELECT '123123', 'abcabc', 'I WANT TO GO TO BED'
UNION ALL
SELECT '123124', 'abcdef', 'SOOO TIRED'
UNION ALL
...
SELECT '123189', 'abcabc', 'HAD SOME SLEEP'
실행한다. 그래서 내 문제는 실제 GO 명령문이 아니며, 'GO'문자가 데이터 문자열에 나타납니다.
답변 : 문제는 내가 정말 바보 같은 실수를 한 것입니다. 나는 "GO"에 나뉘 었는데, 이것은 문자가 나오는 그 매개 변수의 중간에서 명령 문자열을 바로 나눕니다. 도움의 모든
/마른 세수는
감사합니다!
예외는 무엇입니까? 나는 당신이 가지고있는 문제가 위의 SQL에서 보여지는 적어도 키워드가되는 것과 관련이 있다는 것을 매우 의심한다. 나는 그것이 아포스트로피 또는 다른 것 같아요. – Andrew
일부 애플리케이션에서는 'GO'가 배치 분리기로 사용됩니다. 'command.ExecuteNonQuery()'가'GO'를 인식한다고 생각하지 마십시오. 아마도 SQL 스크립트를 파싱하고 한 번에 하나의 배치를 실행하는 C# 코드가 있을까요? 이 문제를 해결할 방법을 찾아야합니다. 자신을 코딩하고 스크립트 파일의 생성을 제어 할 수 있다면'GO '가 한 줄에있을 때만 새로운 배치를 시작하도록 코드를 변경할 수 있습니다. –
어떤 데이터베이스를 사용하고 있습니까? SQL Server이고 개발자 버전 이상인 경우. SQL 프로파일 러를 실행하여 서버에서 실행중인 SQL을 확인하십시오. – Andrew