c# - CommandType.Text 与 CommandType.StoredProcedure

标签 c# sql database ado.net

显式使用 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);

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

最佳答案

一个区别是消息泵送的发生方式。

在我以前工作的地方,我们有许多通宵运行的批处理过程。其中许多只涉及运行存储过程。我们曾经使用 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/

相关文章:

c# - 动态地向复杂数据类型添加属性

java - 无法将空日期值插入 mysql

mysql - 一列指向多个表的表的模式设计

mysql - 如何在分区数据库中保持唯一键唯一?

sql - '! =' and ' <>' postgresql 中的运算符

sql - sphinx 问题: Structuring database

javascript - 使用c#创建合法的javascript文件

c# - 使用 Win32API : unions within structures generate TypeLoadException

c# - 使用 dotnet core 解压缩 .taz 文件

SQL:如何将 "ORDER BY"和 "GROUP BY"一起使用?