Вы ошибочно представляете, как работают параметризованные запросы. «Разобранный текст», о котором вы говорите, никогда не создается, а значения параметров никогда не подставляются непосредственно в строку запроса.
Вот почему так важно использовать параметризованные запросы & mdash; у вас завершено отделение данных запроса от кода запроса. Данные - это данные, код - это код, и они никогда не встретятся. Таким образом, нет возможности для инъекции sql.
Что это означает, что если у вас есть CommandText, как это:
SELECT SomeColumn FROM SomeTable WHERE ID= @ID
вместо окончательного выполнения запроса, который выглядит следующим образом:
SELECT SomeColumn FROM SomeTable WHERE ID= 123
вы на самом деле запускаете что-то вроде этого:
DECLARE @ID Int
Set @ID = RetrieveQueryDataItem("@ID")
SELECT SomeColumn FROM SomeTable WHERE ID= @ID
Так вот, это не совсем то, что происходит; двигатель не преобразует код, как это. Вместо этого он использует процедуру sp_executesql. Но это должно помочь вам понять, что происходит.