【问题标题】:SQL Server 2008 R2 Missing ParameterSQL Server 2008 R2 缺少参数
【发布时间】:2012-05-16 05:36:27
【问题描述】:

我的System.Data.SqlClient 报告我忘记传递参数。

好吧,我一直在为此挠头。

我在 VS2008 中使用 SQL Server 2008 R2 和 Asp.Net MVC2。

这是屏幕。

我错过了什么?

编辑

这里是存储过程头

ALTER  PROCEDURE [dbo].[ClientMst_AUTO](@Params VARCHAR(50),@result   xml output)
as
BEGIN

【问题讨论】:

  • 您能告诉我们您正在使用的实际 SQL 语句吗?另外:当您定义SqlDbType.VarChar 类型的SqlParameter 时 - 您应该始终 定义一个长度 - 否则您可能会得到一个长度为 1 个字符的字符串!
  • 你的意思是存储过程还是命令文本?
  • 如果是存储过程 - 然后是存储过程头(查看参数是什么样子) - 否则是完整的 SQL 语句。
  • 你想调用一个名为“GetInvoiceHdr_AUTO”的过程,异常状态是你调用了“ClientMst_AUTO”。除非这些过程具有相同的参数列表,否则它几乎不可能工作。
  • 对不起,我粘贴了错误的过程。无论如何,两者都有相同的标题。我刚刚用正确的存储过程更新了它。

标签: sql-server asp.net-mvc sql-server-2008 asp.net-mvc-2 ado.net


【解决方案1】:

代码乍一看很好 - 我看到 可能 解释行为的唯一一点是:您已将参数 @result 定义为 ParameterDirection.InputOutput - 但您'没有在 input 端为该参数提供任何值...

尝试在将parm2 添加到cmd.Parameters 集合之前添加此行:

parm2.Value = string.Empty;

这有什么改变吗?

或者:只需将参数定义为ParameterDirection.Output(而不是InputOutput) - 是否解决了问题?

【讨论】:

  • 现货!!这正是问题所在。非常感谢马克。现在它在初始化参数值后工作正常。
【解决方案2】:

如果您不打算将值传递给 @result 参数,请将 parm2.Direction 设置为 ParameterDirection.Output

【讨论】:

  • 谢谢,但在我所有的存储过程中,它都是这样传递的,它们工作正常。今天我刚刚决定在我的 DAL 中创建一个新的重载,我在这里遇到了这个奇怪的问题。
  • 会不会是因为SqlClient 损坏了?还是临时文件问题?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多