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

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

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

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)

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