1- آماده سازی:
Imports Microsoft.SqlServer.TransactSql
Dim dt_tokens As New DataTable
Dim dt_errors As New DataTable
Private Sub SQLscriptDom_ParseScript_Load(sender As Object, e As EventArgs) Handles MyBase.Load
If dt_tokens.Columns.Count > 0 Then Exit Sub
With dt_tokens
.Columns.Add("Line", GetType(System.Int32))
.Columns.Add("Column", GetType(System.Int32))
.Columns.Add("Offset", GetType(System.Int32))
.Columns.Add("Text", GetType(System.String))
.Columns.Add("Type", GetType(System.String))
.Columns.Add("IsKeyword", GetType(System.Boolean))
End With
DGV_ScriptTokens.DataSource = dt_tokens
With dt_errors
.Columns.Add("Error", GetType(System.Int32))
.Columns.Add("Line", GetType(System.Int32))
.Columns.Add("Offset", GetType(System.Int32))
.Columns.Add("Message", GetType(System.String))
End With
DGV_Errors.DataSource = dt_errors
End Sub
2- خواندن سورس و بیرون کشیدن tokenها:
Private Sub Btn_Parse_Click(sender As Object, e As EventArgs) Handles Btn_Parse.Click
dt_script.Clear()
dt_errors.Clear()
Dim parse_errors As IList(Of ScriptDom.ParseError) = Nothing
Dim parser As New ScriptDom.TSql150Parser(True)
Dim script As New ScriptDom.TSqlScript
Using reader As New System.IO.StringReader(SQL_Source.Text)
script = parser.Parse(reader, parse_errors)
End Using
If parse_errors.Count > 0 Then
Dim dr_error As DataRow
For Each perr As ScriptDom.ParseError In parse_errors
dr_error = dt_errors.NewRow
dr_error("Error") = perr.Number
dr_error("Line") = perr.Line
dr_error("Offset") = perr.Offset
dr_error("Message") = "sc=" & perr.Message
dt_errors.Rows.Add(dr_error)
Next
End If
If script Is Nothing Then Exit Sub
Dim dr_script As DataRow
For Each token As ScriptDom.TSqlParserToken In script.ScriptTokenStream
If token.TokenType <> ScriptDom.TSqlTokenType.WhiteSpace Then
dr_script = dt_script.NewRow
dr_script("Line") = token.Line
dr_script("Column") = token.Column
dr_script("Offset") = token.Offset
dr_script("Type") = token.TokenType.ToString
dr_script("Text") = token.Text
dr_script("IsKeyword") = token.IsKeyword
dt_script.Rows.Add(dr_script)
End If
Next
End Sub