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 print
和raiserror
函数,.Net程序将接收并记录这些函数。 我们学到的是CommandType.StoredProcedure
总是会将这些消息缓冲到大约50个批处理中。无论你在连接上设置什么选项或什么选项,.Net代码都不会看到任何日志事件,直到程序完成或刷新缓冲区为止。你在你的SQL中做过。 CommandType.Text
为我们修复了这个问题。
作为一个侧面问题,我将使用显式类型与您的查询参数。 让.Net尝试推断您的参数类型可能会在某些情况下导致问题。
它更干净。
您正在调用存储过程,为什么不使用CommandType.StoredProcedure
?