.net - SQL Server 和 .net 支持使用参数值调用存储过程而不提供参数名称吗?

标签 .net sql-server

假设我在 SQL Server 中有一个名为 sp_GetData1 的存储过程,其参数为:

@Input1 int
@Input2 string

这个存储过程将返回一个数据表。为了从此存储过程获取数据表,我使用 ADO.NET。要执行此存储过程,我们必须提供参数的名称、参数的 sqldatatype 和参数的值

我有一个问题:我们可以在不提供参数名称和参数 sqldatatype 的情况下执行此存储过程(使用 ADO.NET)吗?这意味着,我只需要按顺序提供参数值。

谢谢。

最佳答案

在不直接指定参数的名称、方向和类型的情况下安全执行存储过程的一种方法是使用 SqlCommandBuilder.DeriveParameters

这将从服务器检索参数并为您创建 SQLParameter 集合。您仍然需要填充命令参数集合中的值。

...I'm assuming  a variable cmd with the command string and connection property set
SqlCommandBuilder.DeriveParameters(cmd);
cmd.Parameters[0].Value = input1;
cmd.Parameters[1].Value = input2;

访问服务器会有性能损失,但至少不用担心sql注入(inject)

旧的 SQLHelper 会执行此操作并缓存参数,因此它只执行一次。企业图书馆也会这样做。完整的 ORM 也会为您做类似的事情。

关于.net - SQL Server 和 .net 支持使用参数值调用存储过程而不提供参数名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6463010/

相关文章:

c# - GetWeekOfYear 返回错误的结果?

.net - 如何在自定义 WPF 文本框中显示插入符号

c# - 标签页添加用户控件

security - 如何保护 .ASPXAUTH token

c# - 在 C# 中向表中插入记录时无法将 NULL 值传递给参数

.net - GraphQL 热巧克力构造函数 DI 在第二次请求时失败

c# - 使用 SqlDataAdapter 更新数据库 View

sql-server - 如何使用 SQL 对行重新排序(不交换)

sql - 引用外部表时从子查询连接 TOP 1

c# - Entity Framework 查询一个逗号分隔的字段