【问题标题】:sp_executesql & missing parameter errorsp_executesql & 缺少参数错误
【发布时间】:2014-07-30 21:43:36
【问题描述】:

我有这个 SQL 语句

exec sp_executesql N'test', N'@name varchar(10)', @name=N'john'

在 SQL Server 2012 中出现错误:

过程或函数“测试”需要参数“@name”,但未提供。

过程定义为:

CREATE PROCEDURE [dbo].[test]
    @name varchar(10) 
AS
BEGIN
    select @name
END

SQL 是从 C# 使用 SqlCommand 对象上的 BeginExecuteReader 命令生成的,并且使用以下命令将参数添加到参数集合中:

new SqlParameter("@" + parametername, sqldbType, size) 

然后设置值。

是什么导致了错误?

因为 SQL 不是手动生成的,所以我正在寻找一个答案,它可以让SqlCommand 生成一个工作 SQL 或修改存储过程以使其与从 .NET 生成的 SQL 一起工作。作为测试,我为 name 参数添加了一个默认值,错误消失了,但 name 的值不存在。某处断线了。

【问题讨论】:

  • 存储过程的定义和你有问题的语句,它们是什么关系?您如何在存储过程中使用sp_executesql
  • @M.Ali 我不明白你的问题。 sp_executesql 不在 sp 里面使用。 sp_executesql 执行 sp。

标签: c# sql .net sql-server ado.net


【解决方案1】:

试试这个语法:

exec sp_executesql N'exec dbo.test @name',N'@name varchar(10)',@name=N'john'

【讨论】:

  • 这里有 3 个 exec/sp_execute 调用。真的需要这么多才能调用一个过程吗?
  • @usr 这是一个单独的调用,我无法控制它。 ADO.NET 创建它。
  • @Abdu 也许您需要将 CommandType 设置为 StoredProcedure?如果 ADO.NET 总是生成这样的代码,那将是一个毫无用处的框架。
  • @usr 你说得对!我忘记设置命令类型,因此 ado.net 将其视为我错误地拼凑在一起的动态 sql 语句。现在效果好多了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-16
  • 2012-03-04
  • 2020-09-09
  • 2019-10-25
相关资源
最近更新 更多