Я просмотрел множество вопросов, но, очевидно, мой SO-fu не справился с задачей, поэтому я здесь. Я пытаюсь эффективно использовать подготовленные операторы, и я имею в виду не только параметризацию одного оператора, но и компиляцию для многократного использования. Мой вопрос лежит вокруг параметров и повторного использования и того, как правильно их реализовать.
Как правило, я следую этой процедуре (надуманный пример):
SqlConnection db = new SqlConnection(...);
SqlCommand s = new SqlCommand("select * from foo where [email protected]", db);
s.Parameters.Add("@a", SqlDbType.VarChar, 8);
s.Prepare();
...
s.Parameters["@a"] = "bozo";
s.Execute();
Супер, это работает. Тем не менее, я не хочу делать все эти шаги (или последние четыре) каждый раз, когда я запускаю этот запрос. Похоже, что он противодействует всей идее подготовленных заявлений. По моему мнению, мне нужно только изменить параметры и повторно выполнить, но вопрос в том, как это сделать?
Я попробовал s.Parameters.Clear()
, но это фактически удаляет сами параметры, а не только значения, поэтому мне по существу нужно снова вернуться к параметрам и повторно Prepare
, которые, казалось бы, также. Нет благодарности.
В этот момент я остаюсь с итерацией через s.Parameters
и установкой их всех в значение null или какое-либо другое значение. Правильно ли это? К сожалению, в моем текущем проекте у меня есть запросы с ~ 15 параметрами, которые нужно выполнить ~ 10000 раз за запуск. Я могу запустить эту итерацию в метод, но задавался вопросом, есть ли лучший способ сделать это (без сохраненных процедур).
Мое текущее обходное решение - это метод расширения SqlParameterCollection.Nullify
, который устанавливает все параметры равными нулю, что отлично подходит для моего случая. Я просто запускаю это после выполнения.
Я нашел несколько практически идентичных, но (IMHO) вопросов без ответа:
Подготовленные операторы и встроенный пул соединений в .NET
Объединение пула соединений SQLite/С# и готовность к запуску отчета (Серж был так близко к ответу!)
Лучший ответ, который я мог найти, - это (1) здравый смысл выше и (2) эта страница: