यदि आप एक उपकरण बना रहे हैं जो उपयोगकर्ता को हाथ से कुछ sql कोड दर्ज करने की अनुमति देता है और आप sql सर्वर पर निष्पादन से पहले C# कोड का उपयोग करके दर्ज किए गए कोड को मान्य करना चाहते हैं, तो आप इस तरह की एक विधि बना सकते हैं:
using Microsoft.Data.Schema.ScriptDom;
using Microsoft.Data.Schema.ScriptDom.Sql;
public class SqlParser
{
public List<string> Parse(string sql)
{
TSql100Parser parser = new TSql100Parser(false);
IScriptFragment fragment;
IList<ParseError> errors;
fragment = parser.Parse(new StringReader(sql), out errors);
if (errors != null && errors.Count > 0)
{
List<string> errorList = new List<string>();
foreach (var error in errors)
{
errorList.Add(error.Message);
}
return errorList;
}
return null;
}
}
2018 और नए डेटाबेस संस्करणों के अनुसार, यह नया संस्करण हो सकता है:
using Microsoft.SqlServer.TransactSql.ScriptDom;
(एनपीएम के साथ डाउनलोड करें:पीएम> इंस्टाल-पैकेज Microsoft.SqlServer.TransactSql.ScriptDom -Version 14.0.3811.1)
public bool IsSQLQueryValid(string sql, out List<string> errors)
{
errors = new List<string>();
TSql140Parser parser = new TSql140Parser(false);
TSqlFragment fragment;
IList<ParseError> parseErrors;
using (TextReader reader = new StringReader(sql))
{
fragment = parser.Parse(reader, out parseErrors);
if (parseErrors != null && parseErrors.Count > 0)
{
errors = parseErrors.Select(e => e.Message).ToList();
return false;
}
}
return true;
}