Есть ли стандартные функции экранирования строк для SQL запроса? Я имею в виду вместо добавления в SqlCommand параметров, может можно безопасно вставлять необходимые мне значения прямо в текст SQL запроса? Мне в любом случае необходимо объединять строки для вставки значений вроде "@p1, @p2" и так далее. Мне кажется если вставлять данные напрямую программа будет работать быстрее, но без экранирования может быть sql injection.
В SQL Server есть кэш планов. При выполнении каждого запроса SQL Server смотрит, есть ли уже существующий план в кэше, и если есть - экономит время за счет переиспользования плана.
Поиск в кэше осуществляется по тексту запроса. Значения параметров в текст запроса не входят.
Если вы пришлете запрос с другим текстом - SQL Server вынужден будет построить план заново. Построение плана - дорогая операция. Иногда она даже дороже, чем само выполнение запроса.
Вот такие запросы, со значением прямо в тексте, потребуют двух компиляций запроса в план:
SELECT * FROM AdventureWorks2008R2.Production.Product
WHERE ProductSubcategoryID = 1;
SELECT * FROM AdventureWorks2008R2.Production.Product
WHERE ProductSubcategoryID = 4;
Если вы пришлете запрос с тем же текстом, но другими значениями параметров - SQL Server использует существующий план, что гораздо быстрее:
-- первое выполнение вызовет построение плана
SELECT * FROM AdventureWorks2008R2.Production.Product
WHERE ProductSubcategoryID = @ProductSubcategoryID;
-- используется существующий план, вне зависимости от значения @ProductSubcategoryID
SELECT * FROM AdventureWorks2008R2.Production.Product
WHERE ProductSubcategoryID = @ProductSubcategoryID;
Т.е. то, что вы пытаетесь сделать - вставлять значения прямо в текст запроса - не ускорит, а наоборот, замедлит выполнение. Не говоря уже о проблемах с безопасностью, которые вы при этом получите.
Причем производительность падает настолько, что в SQL Server 2005 добавили режим FORCED параметризации, который принудительно делает из непараметризированных запросов параметризированные - т.е. MS очень старательно пытается заставить вас использовать параметры ради производительности. Вплоть до графиков в SQL Azure, где рисуется нагрузка вашей базы, и нагрузка "вот такой она могла бы быть при использовании параметров".
Наоборот, запросы с параметрами будут работать быстрее, поскольку БД запоминает их и постепенно оптимизирует. А в случае цельного запроса, она будет считать каждый запрос новым и от аналогичных запросов ничего оставаться не будет.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости