SQL Server 2008 R2缺失参数。

3

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

我已经苦思冥想了很久。

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

这是屏幕截图。

enter image description here

我错过了什么?

编辑

这是存储过程头部。

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

1
您能展示一下您正在使用的实际SQL语句吗?此外,当您定义一个类型为SqlDbType.VarCharSqlParameter时,应该始终定义一个长度-否则,您可能会得到一个长度为1个字符的字符串! - marc_s
你是指存储过程还是命令文本? - Deb
你想调用一个名为"GetInvoiceHdr_AUTO"的过程,但异常指出你调用了"ClientMst_AUTO"。除非这些程序具有相同的参数列表,否则它们很难一起工作。 - Mithrandir
抱歉,我粘贴了错误的存储过程。无论如何,它们都有相同的头文件。我刚刚用正确的存储过程进行了更新。 - Deb
行为令人难以置信。这就是我发布屏幕截图的原因。无论如何,感谢您的建议。我会记在心里的。 - Deb
显示剩余2条评论
2个回答

2
代码乍一看没问题 - 我唯一发现的可能解释这种行为的地方是:你将参数 @result 定义为 ParameterDirection.InputOutput - 但是在输入端没有提供任何值...
在将 parm2 添加到 cmd.Parameters 集合之前,请尝试添加以下行:
parm2.Value = string.Empty;

这会改变什么吗?

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


1
非常准确!!那正是问题所在。非常感谢,马克。现在,在初始化参数值后它可以正常工作了。 - Deb

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

谢谢,但在我的所有存储过程中,它都是这样传递的,它们都正常工作。今天我只是决定在我的 DAL 中创建一个新的重载函数,但现在我面临着这个奇怪的问题。 - Deb
可能是由于SqlClient损坏或临时文件问题引起的吗? - Deb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接