参见英文答案 When executing a stored procedure, what is the benefit of using CommandType.StoredProcedure versus using CommandType.Text? 4个问题:使用标准SQLCommand...

参见英文答案 > When executing a stored procedure, what is the benefit of using CommandType.StoredProcedure versus using CommandType.Text? 4个
问题:使用标准SQLCommand和SQLCommand.ComandType = StoredProcedure有什么区别?
由于我不确定参数是按名称还是按顺序传递给命令对象,我更喜欢这样:
SqlCommand oCmd = new SqlCommand("exec sp_StoredProcedure @Param1, @Param2, @Param3", oDBConnection);
oCmd.Parameters.Add("Param1", SqlDbType.Bit).Value = var_param1;
oCmd.Parameters.Add("Param2", SqlDbType.NVarChar).Value = var_param2;
oCmd.Parameters.Add("Param3", SqlDbType.NVarChar).Value = var_param3;
而不是
SqlCommand oCmd = new SqlCommand("sp_StoredProcedure", oDBConnection);
oCmd.CommandType = StoredProcedure;
oCmd.Parameters.Add("Param1", SqlDbType.Bit).Value = var_param1;
oCmd.Parameters.Add("Param2", SqlDbType.NVarChar).Value = var_param2;
oCmd.Parameters.Add("Param3", SqlDbType.NVarChar).Value = var_param3;
//Do the parameter names and the parameter order matter here?
我不明白我为什么要做第二个?
解决方法:
第一个是完全冗余的步骤,它强制解析,生成,缓存和执行第二个(但是微不足道的)查询计划.它还提供了很好的机会(例如)忘记添加参数.您还需要考虑第一个中的参数现在按位置(在内部TSQL中)传递,其中 – 在第二个中它们按名称传递;这里通常更喜欢名字.同样,如果你向oCmd.Parameters添加一个新参数,你现在有一个额外的维护步骤来维护内部命令 – 或者冒着引入错误的风险,在第二个例子中你不需要做任何额外的事情.
基本上,第一个例子没有任何积极的东西,也有很多负面因素.
Re-by-name与pass-by-position,这基本上是TSQL中exec关键字的一个特性.有两种用途:
exec MyProc 'abc', 123
要么
exec MyProc @foo='abc', @bar=123
第一个是旁边的; ‘abc’被传递给MyProc的第一个声明参数,123被传递给MyProc的第二个声明参数.任何其他参数如果有一个参数,则采用其默认值.
第二个是姓名; ‘abc’被传递给名为@foo的MyProc参数,123被传递给名为@bar的MyProc参数.任何其他参数如果有一个参数,则采用其默认值.
所以在你的具体例子中:
exec sp_StoredProcedure @Param1, @Param2, @Param3
是按位传递,并且:
exec sp_StoredProcedure @Param1=@Param1, @Param2=@Param2, @Param3=@Param3
是低音的.
本文标题为:c# – 我为什么要使用SqlCommand.CommandType = StoredProcedure?


基础教程推荐
- C#利用DesignSurface如何实现简单的窗体设计器 2022-11-03
- C#:为什么我得到“进程无法访问文件*因为正被另一个进程使用”这段代码? 2023-09-18
- deepin命令行安装_在基于Debian开发的Deepin上快速搭建.net core开发环境 2023-09-27
- 关于C#线程的全面解析 2023-05-31
- Unity色子的投掷和点数的获得详析 2022-12-31
- c# 通过代码开启或关闭防火墙 2023-03-13
- C#制作二维柱状图方法 2023-01-06
- C#获得程序的根目录以及判断文件是否存在的实例讲解 2023-01-22
- 在 Visual Studio 中查看反汇编代码 2023-03-03
- C#异步编程之async/await详解 2023-07-18