복붙노트

[SQL] C #으로 SQL 코드를 파싱 [폐쇄]

SQL

C #으로 SQL 코드를 파싱 [폐쇄]

전 C #을 사용하여 SQL 코드를 구문 분석합니다.

특히, SQL 코드를 분석하고 나무 또는 그 밖의 다른 구조를 생성 할 수있는 무료로 사용할 수 파서가? 또한 중첩 된 구조에 대한 적절한 트리를 생성해야합니다.

또한이 나무의 노드가 나타내는 문장의 종류를 반환해야합니다.

노드가 다음 루프 조건을 포함하는 경우, 예를 들어,이 노드의 "루프 형"인 것으로 리턴한다.

또는 나는 C #의 코드를 분석하고 내가 원하는 형태의 트리를 생성 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.사용 마이크로 소프트 엔티티 프레임 워크 (EF).

    사용 마이크로 소프트 엔티티 프레임 워크 (EF).

    또한, 식 트리를 빌드 "법인 SQL"파서를 가지고

    using System.Data.EntityClient;
    ...
    EntityConnection conn = new EntityConnection(myContext.Connection.ConnectionString);
    conn.Open();
    EntityCommand cmd = conn.CreateCommand();
    cmd.CommandText = @"Select t.MyValue From MyEntities.MyTable As t";
    var queryExpression = cmd.Expression;
    ....
    conn.Close();
    

    또는 그런 일이 MSDN에 체크 아웃.

    그리고 그것은 Ballmers 진드기에 전부 :-)

    또한 코드 프로젝트에 하나, SQL 파서있다.

    행운을 빕니다.

  2. ==============================

    2.특히 거래-SQL (마이크로 소프트 SQL 서버) 당신은 Microsoft.SqlServer.Management.SqlParser.dll에서 사용할 수있는 Microsoft.SqlServer.Management.SqlParser.Parser 네임 스페이스, 어셈블리 자유롭게 배포 할 수 SQL Server와 함께 제공 할 수 있습니다.

    특히 거래-SQL (마이크로 소프트 SQL 서버) 당신은 Microsoft.SqlServer.Management.SqlParser.dll에서 사용할 수있는 Microsoft.SqlServer.Management.SqlParser.Parser 네임 스페이스, 어셈블리 자유롭게 배포 할 수 SQL Server와 함께 제공 할 수 있습니다.

    여기서 토큰들의 시퀀스에 캐릭터로서 T-SQL을 파싱하기위한 방법의 예이다 :

    IEnumerable<TokenInfo> ParseSql(string sql)
    {
        ParseOptions parseOptions = new ParseOptions();
        Scanner scanner = new Scanner(parseOptions);
    
        int state = 0,
            start,
            end,
            lastTokenEnd = -1,
            token;
    
        bool isPairMatch, isExecAutoParamHelp;
    
        List<TokenInfo> tokens = new List<TokenInfo>();
    
        scanner.SetSource(sql, 0);
    
        while ((token = scanner.GetNext(ref state, out start, out end, out isPairMatch, out isExecAutoParamHelp)) != (int)Tokens.EOF)
        {
            TokenInfo tokenInfo =
                new TokenInfo()
                {
                    Start = start,
                    End = end,
                    IsPairMatch = isPairMatch,
                    IsExecAutoParamHelp = isExecAutoParamHelp,
                    Sql = sql.Substring(start, end - start + 1),
                    Token = (Tokens)token,
                };
    
            tokens.Add(tokenInfo);
    
            lastTokenEnd = end;
        }
    
        return tokens;
    }
    

    TokenInfo 클래스는 위에서 언급 된 특성을 가진 단순한 클래스합니다.

    토큰이 나열되어 있습니다 :

    등 TOKEN_BEGIN, TOKEN_COMMIT, TOKEN_EXISTS 같은 상수를 포함

  3. ==============================

    3.스콧 Hanselman은 최근 샘플 SQL 파서를 포함하는 아이러니 프로젝트를 선보였습니다.

    스콧 Hanselman은 최근 샘플 SQL 파서를 포함하는 아이러니 프로젝트를 선보였습니다.

  4. ==============================

    4.당신은 상업 구성 요소를 살펴 수 있습니다 : 일반 SQL 파서를 http://www.sqlparser.com에서 그것은 오라클, T-SQL, DB2와 MySQL의 SQL 구문을 지원합니다.

    당신은 상업 구성 요소를 살펴 수 있습니다 : 일반 SQL 파서를 http://www.sqlparser.com에서 그것은 오라클, T-SQL, DB2와 MySQL의 SQL 구문을 지원합니다.

  5. ==============================

    5.ANTLR 시도 - 거기에 SQL 문법의 무리가 있습니다.

    ANTLR 시도 - 거기에 SQL 문법의 무리가 있습니다.

  6. ==============================

    6.VSTS 2008 데이터베이스 버전 GDR은 핸들 SQL 구문 분석 및 스크립트 생성이 프로젝트에서 참조 할 수있는 어셈블리가 포함되어 있습니다. 데이터베이스 버전은 데이터베이스의 메모리 모델을 대표하는 스크립트 파일을 구문 분석 파서를 사용하고 모델에서 SQL 스크립트를 생성하는 스크립트 생성기를 사용합니다. 난 그냥 두 어셈블리는 당신이 당신의 프로젝트에서 참조 할 필요가 있다고 생각합니다. 데이터베이스 버전이없는 경우에는 어셈블리를 얻을 수있는 시험 버전을 설치하거나 데이터베이스 버전을 설치하지 않고 그것들을 가지고있는 또 다른 방법이있을 수 있습니다. 다음 링크를 확인하세요. 데이터 야 : 크라운 보석에 도착.

    VSTS 2008 데이터베이스 버전 GDR은 핸들 SQL 구문 분석 및 스크립트 생성이 프로젝트에서 참조 할 수있는 어셈블리가 포함되어 있습니다. 데이터베이스 버전은 데이터베이스의 메모리 모델을 대표하는 스크립트 파일을 구문 분석 파서를 사용하고 모델에서 SQL 스크립트를 생성하는 스크립트 생성기를 사용합니다. 난 그냥 두 어셈블리는 당신이 당신의 프로젝트에서 참조 할 필요가 있다고 생각합니다. 데이터베이스 버전이없는 경우에는 어셈블리를 얻을 수있는 시험 버전을 설치하거나 데이터베이스 버전을 설치하지 않고 그것들을 가지고있는 또 다른 방법이있을 수 있습니다. 다음 링크를 확인하세요. 데이터 야 : 크라운 보석에 도착.

  7. ==============================

    7.GOLD 파서를 시도, 그것은 BNF 엔진을 배울 강력하고 쉬운입니다. 당신은 이미 당신이 원하는 것을 위해 만든 문법을 검색 할 수 있습니다 (예 : SQL ANSI 89 문법).

    GOLD 파서를 시도, 그것은 BNF 엔진을 배울 강력하고 쉬운입니다. 당신은 이미 당신이 원하는 것을 위해 만든 문법을 검색 할 수 있습니다 (예 : SQL ANSI 89 문법).

    나는 HQL 구문 분석 (SQL과 매우 유사한 NHibernate에 쿼리 언어)이 사용하기 시작하고 끝내.

    업데이트 : 이제 NH 데브 팀은 ANTLR 사용하여 분석 HQL (사용 어렵습니다,하지만 더 강력한 AFAIK)를 수행하고있다.

  8. ==============================

    8.디에고 제안으로, 문법은 이럴을 갈 수있는 방법입니다. 나는 코코 / 이전 연구를 시도했다, 그러나 그것은 복잡한 SQL 너무 간단합니다. ANTLR 준비 문법의 번호가있다.

    디에고 제안으로, 문법은 이럴을 갈 수있는 방법입니다. 나는 코코 / 이전 연구를 시도했다, 그러나 그것은 복잡한 SQL 너무 간단합니다. ANTLR 준비 문법의 번호가있다.

    C #으로 작성된 SQL 엔진 - 사람이 심지어는 SQL 엔진을 구축 SharpHSQL에서 당신을 위해 무언가가 있다면 코드를 확인하기 위해 노력했다.

  9. from https://stackoverflow.com/questions/589096/parsing-sql-code-in-c-sharp by cc-by-sa and MIT license