Что реально делает SqlCommand.Prepare()?

Fedishen
Дата: 18.02.2005 16:49:36
Что реально делает SqlCommand.Prepare()? Если
CommandType = CommandType.StoredProcedure
Каким образом метод сравнивает параметры SqlCommand c параметрами ХП перед тем как передать их в ХП и выполнить ее?
Alexey Sh
Дата: 19.02.2005 00:58:52
Посмотри отличия в профайлере
Fedishen
Дата: 19.02.2005 19:46:06
смотрел, ниче ни делает
Alexey Sh
Дата: 20.02.2005 20:37:26
Fedishen
Что реально делает SqlCommand.Prepare()? Если
CommandType = CommandType.StoredProcedure
Каким образом метод сравнивает параметры SqlCommand c параметрами ХП перед тем как передать их в ХП и выполнить ее?


А зачем их сравнивать? Параметры передаются в соответствии с описанием в Parameters.Add . Если преобразование к типам в описании процедуры невозможно- будет ошибка
Sa
Дата: 20.02.2005 22:20:28
Prepare не связан с параметрами.

Exams 070-316 Developing Windows-based Applications with Visual C# .Net

The SqlCommand.Prepare Method creates a prepared version of the command on an instance of SQL Server. It prepares a compiled version of the command on the data source. We only need to compile the stored procedure once. Compiling the procedure would improve performance since it will run many times.


ИМХО при использовании ADO.NET и MS SQL Server о Prepare вообще можно забыть.

uid = Sa
Sa
Дата: 20.02.2005 23:34:03
Уточню, речь идет об SqlCommand и MS SQL Server = MS SQL Server 2k

Так как на других СУБД можно поймать исключение и на Prepare непосредственно до выполнения команды.

uid = Sa
Alexey Sh
Дата: 21.02.2005 00:28:39
Мануал гласит:
Remarks
If CommandType is set to StoredProcedure, the call to Prepare should succeed, although it may result in a no-op.



Если CommandType = CommandType.Text, о prepare работает так же как и в OLEDB(речь идёт о mssql 2000). При первом выполнении команды выдаётся sp_prepexec , при последующих sp_execute.
Без prepare выдаётся sp_executesql
Sa
Дата: 21.02.2005 00:53:39
:-)
На то он и Text

uid = Sa
Alexey Sh
Дата: 21.02.2005 01:05:08
в OLEDB prepared вызов ХП выдаёт sp_prepexecrpc c последующими sp_execute
Экономия - на передаче имени процедуры и поиске процедуры по имени
Sa
Дата: 21.02.2005 01:20:38

в OLEDB prepared вызов ХП выдаёт sp_prepexecrpc c последующими sp_execute
Экономия - на передаче имени процедуры и поиске процедуры по имени

не призыв ли это: держать connect всегда открытым и не использовать pooling? :-)

uid = Sa