与仅使用文本命令相比,显式使用StoredProcedure CommandType有什么好处?换句话说,是

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程序中构建更好的日志记录功能,从而使所有夜间进程的日志记录保持一致。存储过程将使用sql printraiserror函数,.Net程序将接收并记录这些过程。我们了解到,CommandType.StoredProcedure总是将这些消息缓冲成大约50个批次。在过程完成或刷新缓冲区之前,.Net代码将看不到任何日志事件,无论您在连接上设置了什么选项或执行了什么操作在你的sql中。 CommandType.Text为我们解决了这个问题。

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

关于c# - CommandType.Text与CommandType.StoredProcedure,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/643880/

10-08 21:33