.net - SqlCommand.Prepare() 有什么作用,应该在什么时候使用?

标签 .net ado.net sqlcommand

这个问题在这里已经有了答案:




8年前关闭。




Possible Duplicate:
Pros and Cons of using SqlCommand Prepare in C#?



这是什么MSDN says关于 SqlCommand.Prepare() :

Creates a prepared version of the command on an instance of SQL Server.



任何人都可以提供更多关于这意味着什么以及何时应该使用它的见解吗?

最佳答案

Prepare method is actually on DbCommand ,从它派生的所有类都将接受。

它的作用是特定于 DbCommand 的数据库提供者。是为了。然而,可以肯定地说(虽然不是绝对规则)在大多数地方,如果命令是一个存储过程,它将产生一个 no op(它被记录为 override of Prepare on SqlCommand ),因为存储过程通常有他们的查询计划由于先前的调用、显式的优化调用或创建而优化(同样,取决于底层数据库)。

但是,如果您不使用存储过程,而是使用动态生成的参数化查询,那么此调用将使底层数据库有机会生成查询的优化版本。

当您知道将在短时间内多次执行命令时,通常会执行此操作(这实际上取决于数据库以及查询计划的缓存时间)。

应该指出的是,SQL Server(截至 2005 年,IIRC)根据第一次执行后的使用情况缓存参数化查询计划(我认为缓存是一种时间退化的缓存,它会在后续使用中重置或减缓其衰减速度),因此,如果您打算使用相同的参数化查询进行多次调用,那么调用 Prepare 可能不会获得太多 yield 。除了预先移动查询准备工作(这也可能是一个好处,取决于您必须执行的工作)。

关于.net - SqlCommand.Prepare() 有什么作用,应该在什么时候使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5818619/

相关文章:

c# - 哪些 .NET 功能允许我使用 "reload"和 "restart"嵌入式服务器?

c# - 为什么 string[0] = "new value"不编译?

c# - PadLeft 不起作用

C# SqlDataReader 执行统计和信息

c# - 当我调用 ExecuteScalar 时, ',' 附近的语法不正确

c# - 将流转换为 IRandomAccessStream

mysql - 如何在ADO.NET DataAdapter.InsertCommand上检索行ID

linq-to-sql - 微软试图用所有这些数据访问策略解决什么问题?

c# - 调用存储过程时如何在表值参数中包含 RowVerson 列?

c# - SqlCommand 参数添加与 AddWithValue