CommandType.Text与CommandType.StoredProcedure

显式使用StoredProcedure CommandType与仅使用Text Command相比有什么好处? 换句话说,是

cmd = new SqlCommand("EXEC StoredProc(@p1, @p2)"); cmd.CommandType = CommandType.Text; cmd.Parameters.Add("@p1", 1); cmd.Parameters.Add("@p2", 2); 

比任何更糟糕的

 cmd = new SqlCommand("StoredProc"); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@p1", 1); cmd.Parameters.Add("@p2", 2); 

编辑:修复了错误的复制粘贴作业(再次)。 此外,问题的重点是数据访问类。 我宁愿能够将存储的proc名称和参数传递到一行,而不是每个参数的额外行。

一个区别是消息泵送如何发生。

在我以前工作的地方,我们有一些过夜运行的批处理过程。 其中许多只是涉及运行存储过程。 我们曾经使用sql server作业调度这些作业,但是从它移开它来代替从.Net程序调用这些程序。 这使我们能够将所有计划任务保存在一个地方,甚至是那些与Sql Server无关的任务。

它还允许我们在调用过程的.Net程序中构建更好的日志记录function,以便所有过夜进程的日志记录保持一致。 存储过程将使用sql printraiserror函数,.Net程序将接收并记录这些函数。 我们学到的是CommandType.StoredProcedure 总是会将这些消息缓冲到大约50个批处理中。无论你在连接上设置什么选项或什么选项,.Net代码都不会看到任何日志事件,直到程序完成或刷新缓冲区为止。你在你的SQL中做过。 CommandType.Text为我们修复了这个问题。

作为一个侧面问题,我将使用显式类型与您的查询参数。 让.Net尝试推断您的参数类型可能会在某些情况下导致问题。

它更干净。

您正在调用存储过程,为什么不使用CommandType.StoredProcedure