В настоящее время у меня есть объект «Фильтр», который соответствует бизнес-объекту. Этот объект имеет свойства, которые относятся к различным способам фильтрации / поиска в списке таких бизнес-объектов. В настоящее время у этих объектов Filter есть метод, который создает содержимое предложения where, которое затем передается в хранимую процедуру SQL Server 2000, где оно объединяется с остальной частью запроса select. Окончательная строка затем выполняется с использованием Exec .
В настоящее время это работает нормально, за исключением проблемы с производительностью из-за отсутствия кэширования плана выполнения. В некоторых исследованиях я видел использование вызова sp_executesql ; это лучшее решение или есть что-то лучше, чем я занимаюсь?
Обновление: Я думаю, что часть проблемы с использованием sp_executesql заключается в том, что на основе коллекции в моем фильтре мне нужно сгенерировать список операторов OR. Я не уверен, что «параметризованный» запрос будет моим решением.
пример
var whereClause = new StringBuilder();
if (Status.Count > 0)
{
whereClause.Append("(");
foreach (OrderStatus item in Status)
{
whereClause.AppendFormat("Orders.Status = {0} OR ", (int)item);
}
whereClause.Remove(whereClause.Length - 4, 3);
whereClause.Append(") AND ");
}