gpt4 book ai didi

c# - CommandType.Text 与 CommandType.StoredProcedure

转载 作者:可可西里 更新时间:2023-11-01 07:57:45 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com