显式使用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程序中构建更好的日志记录功能,以便所有过夜进程的日志记录保持一致.存储过程将使用sql print
和raiserror
函数,.Net程序将接收并记录这些.我们学到的是总是CommandType.StoredProcedure
将这些消息缓冲到大约50个批处理中.无论您在连接上设置了什么选项或者您在连接中执行了什么操作,.Net代码在程序完成或刷新缓冲区之前都不会看到任何日志事件.你的SQL.为我们修好了.CommandType.Text
作为一个侧面问题,我将使用显式类型与您的查询参数.让.Net尝试推断您的参数类型可能会在某些情况下导致问题.