SQL 스크립트를 수동으로 구문 분석하고 각 구문을 개별적으로 실행해야합니까, 아니면 더 좋은 방법이 있습니까? 프로그래밍 방식으로 솔루션을 찾고있는 Iam은 이미이 작업을 수행 할 수있는 도구가 있음을 알고 있습니다. 솔루션이 sqlite뿐 아니라 모든 데이터베이스 시스템에서 작동하면 좋을 것입니다.C# : 프로그래밍 방식으로 SQL 스크립트를 데이터베이스로 가져 오는 방법?
답변
나는이 SqlLite에 어떻게 적용되는지 모르겠지만, 나는 SQLSERVER에 다음과 같은 코드를 사용했습니다 :
이protected virtual void ExecuteScript(SqlConnection connection, string script)
{
string[] commandTextArray = script.Split(new string[] { "GO" }, StringSplitOptions.RemoveEmptyEntries); // See EDIT below!
connection.Open();
foreach (string commandText in commandTextArray)
{
if (commandText.Trim() == string.Empty) continue;
SqlCommand command = new SqlCommand(commandText, connection);
command.ExecuteNonQuery();
}
connection.Close();
}
(경고 : 나는 내 원래의 코드를 수정했습니다 조금 그래서 이것은이다 테스트되지 않은 코드)
ADO.NET을 통해 스크립트를 실행할 때 "GO"라는 단어가 문제가되므로 코드가 "GO"를 구분 기호로 사용하여 전체 스크립트에서 Split() 작업을 수행 한 다음 루프합니다. 명령 배열을 통해 한 번에 하나씩 실행합니다.
편집 :
즉 "GO"다른 단어의 일부로서 스크립트에 표시 될 수 아래 마크의 코멘트는 확실히 유효한 관심사입니다 @. 위의 코드를 작성했을 때 "GO"가 배치 구분 기호로만 나타나는지 확인하기 위해 스크립트를 검색했습니다. 다른 방법 (의도적 인 말장난)은 모든 스크립트를 편집하여 "GO"뒤에는 항상 같은 주석 (예 : "- SPLIT HERE!")이 올 수 있습니다. 구분 기호를 "GO - SPLIT HERE!"로 변경하십시오. 그러나 스크립트를 편집해야합니다. 또 다른 옵션은 Regex.Split()입니다.이 옵션을 사용하면 GO 전에 공백을 확인할 수 있습니다. 필자의 스크립트에서는 배치 분리 기호가 항상 고유 한 행을 사용합니다.
string[] commandTextArray = System.Text.RegularExpressions.Regex.Split(script, "\r\n[\t ]*GO");
결론 일괄 분리에 대한 일부 서식 일관성이 정확하게 스크립트를 분할 할 필요가 있다는 것입니다 : 같은 규칙 스크립트에 적용되는 경우, 다음과 같이 작동해야한다.
DbCommand.ExecuteNonQuery 메서드를 사용하면 데이터베이스에 대해 모든 SQL을 실행할 수 있습니다. 하는 SqlCommand와
샘플 : 그 여러 일괄 명령을 분할하기 때문에, 당신이 'GO'가 포함되어있는 경우 명령을 분할해야 할 수 있습니다 다른 답변에서 제안한 것처럼
var command = new SqlCommand("CREATE TABLE foo ...", connection);
command.ExecuteNonQuery();
.
빈 줄과 주석을 포함하여 여러 가지 다른 SQL 문이 포함 된 큰 문자열을 실행할 수 있습니까? – codymanix
예, 변경하지 않고 SQL에 명령을 보냅니다. –
저는 SqlLite에 익숙하지 않지만 대부분의 RDBMS '는 세미콜론으로 끝내면 여러 문장을 보낼 수 있습니다. 일부는 MSSQL과 마찬가지로 개행 문자를 문장 종결 자로 받아들입니다. 세미콜론 + 개행 문자가 가장 행복해지며 올바른 형식의 코드도 생성됩니다.
MSSQL에서 일괄 분리 기호가있는 경우 일반적으로 "GO"입니다. 그런 다음 클라이언트가 구문 분석 한대로 작업을 조금 더해야합니다. MSSQL을 처리하는 데 coupleofsolutions이 있었지만, 이식성 (있는 경우)을 모르겠습니다. Haack이 최고의 출발점이라고 생각합니다.
SQLite는 세미콜론을 허용합니다. – MyItchyChin
다음 코드에서 Config.Database.CreateCommandText는 데이터베이스에서 테이블과 인덱스를 만들기위한 세미콜론으로 분리 된 명령문의 모음입니다. 다음은 System.Data.SQLite를 사용하지 않고 DB를 생성합니다.내가 당국이의 대답에 동의 오전
private SQLiteCommand command;
private SQLiteConnection connection;
connection = new SQLiteConnection(Config.Database.ConnectionString.ToString());
connection.Open();
command = connection.CreateCommand();
SQLiteConnection.CreateFile(Config.Database.Path);
command.CommandText = Config.Database.CreateCommandText;
command.ExecuteNonQuery();
: 취급 "GO"SQL 스크립트의 구분 - SQL Server 폴더에서 찾을 수 있습니다 당신이 DDLs 필요합니다 http://weblogs.asp.net/jgalloway/archive/2006/11/07/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-2D00-the-easy-way.aspx 쉬운 방법을 "C : \ Program 파일 (x 86) \ 마이크로 소프트 SQL 서버 \ 100 \ SDK \ 어셈블리 \ "
Microsoft.SqlServer.ConnectionInfo.dll
Microsoft.SqlServer.Management.Sdk.Sfc.dll
Microsoft.SqlServer.Smo.dll
도 필요 호환 Framwork, 그래서 당신의 설정 파일에이 줄을 추가합니다. 이 게시물에 주어진
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
</startup>
대답은 더 세련 될 필요가있다. 예를 들어 예외 처리 및 롤백 가능 ... SQL 트랜잭션에 대한 자세한 내용은 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx을 확인하십시오.
- 1. POP3 메일에서 첨부 파일을 프로그래밍 방식으로 가져 오는 방법 (C#)?
- 2. 오라클에있는 데이터베이스로 데이터를 가져 오는 방법
- 3. * .SQL 파일을 가져 오는 방법
- 4. 파일에서 사용자 라이브러리를 프로그래밍 방식으로 가져 오는 방법
- 5. 프로그래밍 방식으로 sqlite의 모든 테이블 목록을 가져 오는 방법
- 6. 프로그래밍 방식으로 IPAQ 포켓 PC에서 cellID를 가져 오는 방법
- 7. XML 파일을 SQL 서버 데이터베이스로 가져 오기
- 8. BIG SQL 파일을 레일즈 데이터베이스로 가져 오는 방법은 무엇입니까?
- 9. 자바 스크립트를 사용하여 요소를 가져 오는 방법
- 10. 프로그래밍 방식으로 글꼴에서 지원하는 문자 인코딩을 가져 오는 방법은 무엇입니까?
- 11. iDisk에서 프로그래밍 방식으로 파일을 가져 오는 방법은 무엇입니까?
- 12. 사용자가 선택한 CSV 파일을 데이터베이스로 가져 오는 방법
- 13. C#에서 Crystal Report 수식 필드의 값을 프로그래밍 방식으로 가져 오는 방법?
- 14. C# 프로그래밍 방식으로 SQL Server 설치 경로를 얻는 방법?
- 15. SQL 문을 더 빨리 가져 오는 방법
- 16. 프로그래밍 방식으로 TFS에서 전체 폴더 기록을 가져 오는 방법은 무엇입니까?
- 17. 프로그래밍 방식으로 공유 목록의 웹 파트를 가져 오는 방법은 무엇입니까?
- 18. 프로그래밍 방식으로 CRM 조직을 가져 오는 방법은 무엇입니까?
- 19. 승인을 위해 대기중인 페이지를 프로그래밍 방식으로 가져 오는 방법은 무엇입니까?
- 20. 프로그래밍 방식으로 웹 서비스 매개 변수를 가져 오는 중입니까?
- 21. SDK를 사용하여 프로그래밍 방식으로 AppID를 iPhone에 가져 오는 방법은 무엇입니까?
- 22. Struts2 값을 프로그래밍 방식으로 .properties 파일에서 가져 오는 방법은 무엇입니까?
- 23. clojure 특수 형식 모음을 프로그래밍 방식으로 가져 오는 방법이 있습니까?
- 24. .NET Compact Framework에서로드 된 모든 어셈블리 (프로그래밍 참조 목록)를 프로그래밍 방식으로 가져 오는 방법
- 25. PHP - SQL : 라운드 로빈 방식으로 가져 오는 결과
- 26. 프로그래밍 방식으로 C#
- 27. 프로그래밍 방식으로 xml을 C#
- 28. 프로그래밍 방식으로 MVC 뷰 목록 가져 오기?
- 29. SQL Server 2008 데이터베이스로 파일 가져 오기
- 30. SQL 서버에서 데이터를 DataGrid로 가져 오는 방법
레코드를 데이터베이스로 가져 오시겠습니까? – jn29098
스크립트의 출처를 물어 볼 수 있습니까? 이 정보는 대답에 영향을 줄 수 있습니다 ... Rob –