与仅使用文本命令相比,显式使用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名称和参数传递到一行,而不是每个参数的额外行。
答案 0 :(得分:7)
一个区别是消息泵送的发生方式。
在我以前工作的地方,我们有一些过夜运行的批处理过程。其中许多只是涉及运行存储过程。我们曾经使用sql server作业调度这些作业,但是从它移开而不是从.Net程序调用这些程序。这使我们能够将所有我们的计划任务保存在一个地方,甚至是那些与Sql Server无关的任务。
它还允许我们在调用过程的.Net程序中构建更好的日志记录功能,以便所有过夜进程的日志记录保持一致。存储过程将使用sql print
和raiserror
函数,.Net程序将接收并记录这些函数。我们学到的是CommandType.StoredProcedure
将总是将这些消息缓冲到大约50个批处理中。.Net代码在程序完成或刷新缓冲区之前不会看到任何日志事件,无论如何你在连接上设置了什么选项或者你在sql中做了什么。 CommandType.Text
为我们解决了这个问题。
作为一个副作用,我会在查询参数中使用显式类型。让.Net尝试推断你的参数类型会在某些情况下引起问题。
答案 1 :(得分:3)
它更干净。
您正在调用存储过程,为什么不使用CommandType.StoredProcedure
?