В настоящее время я пытаюсь найти вызовы .ExecuteSqlCommand и проверить первое значение, передаваемое параметру sql.
Вот пример различий, которые я нашел в нашей базе кода.
ExecuteSqlCommand("[sql statement here]");
против
var sql = "sql statement";
ExecuteSqlCommand(sql);
Пока у меня есть это:
var invocations = root.DescendantNodes()
.OfType<InvocationExpressionSyntax>()
.Select(ie => ModelExtensions.GetSymbolInfo(model, ie).Symbol)
.Where(symbol => symbol != null && symbol.Name == "ExecuteSqlCommand");
foreach (var invocation in invocations)
{
var method = (IMethodSymbol)invocation;
foreach (var param in method.Parameters)
{
//I can't quite seem to get information from IParameterSymbol about whether the param is a string literal, or a reference to a string via a variable.
}
}
Если параметр не является строкой, а вместо этого, переменная, то яМне нужно будет получить значение переменной (столько, сколько она определена во время выполнения).
Я не слишком уверен, является ли это заданием для SemanticModel или SyntaxTree, но мой GUESS заключается в том, чтоSemanticModel должен иметь более подробную информацию, необходимую для того, чтобы я мог найти то, что я ищу.
Моя общая цель - опросить sql, передаваемый методу ExecuteSqlCommand.
Спасибо!