Как правильно и эффективно повторно использовать подготовленный оператор в C # .NET (SQL Server)?

Я посмотрел на множество вопросов, но, очевидно, мойSO-фу не до задачи, вот и я Я пытаюсь эффективно использовать подготовленные операторы, и я имею в виду не только параметризацию одного оператора, но и его сборку для многократного использования. Мой вопрос заключается в параметрах и повторном использовании, и как правильно это реализовать.

Вообще я следую этой процедуре (надуманный пример):

SqlConnection db = new SqlConnection(...);
SqlCommand s = new SqlCommand("select * from foo where a=@a", db);
s.Parameters.Add("@a", SqlDbType.VarChar, 8);
s.Prepare();
...
s.Parameters["@a"] = "bozo";
s.Execute();

Супер, это работает. Однако я не хочу выполнять все эти шаги (или последние четыре) каждый раз, когда запускаю этот запрос. Кажется, это противодействует всей идее подготовленных заявлений. На мой взгляд, мне нужно только изменить параметры и выполнить заново, но вопрос в том, как это сделать?

Я пыталсяs.Parameters.Clear(), но это на самом деле удаляет сами параметры, а не только значения, поэтому мне, по сути, необходимо повторноAdd параметры и повторныеPrepare опять же, что, казалось бы, нарушает и всю суть. Спасибо, не надо.

На данный момент я остался с итерациейs.Parameters и установка их всех в нуль или какое-либо другое значение.Это верно? К сожалению, в моем текущем проекте у меня есть запросы с ~ 15 параметрами, которые должны выполняться ~ 10000 раз за цикл. Я могу выделить эту итерацию в метод, но мне было интересно, есть ли лучший способ сделать это (без хранимых процедур).

Мой текущий обходной путь - это метод расширения,SqlParameterCollection.Nullify, который устанавливает все параметры на ноль, что хорошо для моего случая. Я просто запускаю это после выполнения.

Я нашел практически идентичные, но (ИМХО) без ответа вопросы:

Подготовленные операторы и встроенный пул соединений в .NET

SQLite / C # Пул соединений и путаница с подготовленным оператором (Серж был так близок к ответу!)

Лучший ответ, который я смог найти, это (1) здравый смысл выше и (2) эта страница:

http://msdn.microsoft.com/en-us/magazine/cc163799.aspx

Ответы на вопрос(2)

Ваш ответ на вопрос