2012-09-25 119 views
1

如何在不使用ActiveQueryBuilder的情況下解析SQL語句(用於SQL Server)提取列和參數info(Name,DataType)。解析SQL語句

問候

+0

如果您可以訪問數據庫和程序/視圖/不管,你可能只是看'information_schema'表中找到參數/列等等不用解析語句的名字。 – Bridge

+0

哪個版本的SQL Server?對於SQL Server 2012,您可以使用Microsoft SQL Server 2012 Transact-SQL語言服務。 –

+0

[解析C#中的SQL代碼]可能的重複(http://stackoverflow.com/questions/589096/parsing-sql-code-in-c-sharp) – Justin

回答

1

您可以嘗試TSql100Parser class

鏈接:http://msdn.microsoft.com/fr-fr/library/microsoft.data.schema.scriptdom.sql.tsql100parser.aspx

樣品:

bool fQuotedIdenfifiers = false; 
var _parser = new TSql100Parser(fQuotedIdenfifiers); 

SqlScriptGeneratorOptions options = new SqlScriptGeneratorOptions(); 
options.SqlVersion = SqlVersion.Sql100; 
options.KeywordCasing = KeywordCasing.UpperCase; 
_scriptGen = new Sql100ScriptGenerator(options); 


IScriptFragment fragment; 
IList<ParseError> errors; 
using (StringReader sr = new StringReader(inputScript)) 
{ 
     fragment = _parser.Parse(sr, out errors); 
} 

if (errors != null && errors.Count > 0) 
{ 
     StringBuilder sb = new StringBuilder(); 
     foreach (var error in errors) 
     { 
      sb.AppendLine(error.Message); 
      sb.AppendLine("offset " + error.Offset.ToString()); 
     } 
     var errorsList = sb.ToString(); 
} 
else 
{ 
     String script; 
     _scriptGen.GenerateScript(fragment, out script); 
     var result = script; 
} 
+0

謝謝你們。在成爲桌面應用程序員25年以上之後,我正在努力學習sql。我目前的職位要求我將SQL經驗提升到一個全新的水平。理解sql與其他過程語言相比有多不同,這是一種休閒加。兆豐DITTOS! – garaber

1

好,解析聲明大於取回所產生的模式非常不同聲明。解析意味着你只是驗證查詢的語法。然而,爲了找回結果模式涉及解析,那麼你如何嘗試這個。

DataTable table = new DataTable(); 
SqlDataAdapter sda = new SqlDataAdapter("select * from yourtable", "your connection string"); 
sda.FillSchema(table, SchemaType.Source);