假设我在 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/