Microsoft.Practices.EnterpriseLibrary.Data.Database.SetParameterValue безопасно для потока? - PullRequest
1 голос
/ 11 февраля 2011

Я использую базу данных для выполнения некоторых запросов и собирался оптимизировать вещи.

Я в основном делаю два статических объекта :

private static Database db = ... ;
private static DbCommand cmd = db.GetSqlStringCommand("... where col = @colParam");
....
cmd.Prepare(); //one call

А потом подумал просто сделать:

db.AddInParameter(cmd, "colParam", DbType.String, "some value on each call")

при вызове.

Работает только один раз. После первого звонка я получаю

Имена переменных должны быть уникальными в пакете запроса или хранимой процедуре

сообщение об ошибке, касающееся параметра @colParam.

Итак, я думал о замене дополнения на набор при каждом вызове:

db.SetParameterValue(cmd, "colParam", "some value on each call")

Но это безопасно? У меня такое чувство ... ??!?!?!?.

Потоково ли безопасно иметь только один объект команды, для которого я устанавливаю значение при каждом вызове? Что, если два пользователя установят значение одновременно? Что происходит потом?

1 Ответ

2 голосов
/ 11 февраля 2011

Это определенно в области преждевременной оптимизации.Я не уверен, что вы думаете, что optomising.

Ваши реальные вопросы должны быть безопасны для потока DbCommand.Ответ - нет.Из документации по DbCommand http://msdn.microsoft.com/en-us/library/system.data.common.dbcommand.aspx.

Ни один из членов экземпляра не гарантированно безопасен для потоков.

...