gpt4 book ai didi

c# - 存储过程上的 OdbcCommand - 输出参数出现 "Parameter not supplied"错误

转载 作者:行者123 更新时间:2023-11-30 20:12:16 25 4
gpt4 key购买 nike

我正在尝试执行存储过程(通过 ODBC 驱动程序针对 SQL Server 2005),但收到以下错误:

Procedure or Function 'GetNodeID' expects parameter '@ID', which was not supplied.

@ID 是我的过程的输出参数,有一个输入@machine 已指定并在存储过程中设置为空:

ALTER PROCEDURE [dbo].[GetNodeID] 
@machine nvarchar(32) = null,
@ID int OUTPUT
AS
BEGIN
SET NOCOUNT ON;

IF EXISTS(SELECT * FROM Nodes WHERE NodeName=@machine)
BEGIN
SELECT @ID = (SELECT NodeID FROM Nodes WHERE NodeName=@machine)
END
ELSE
BEGIN
INSERT INTO Nodes (NodeName) VALUES (@machine)
SELECT @ID = (SELECT NodeID FROM Nodes WHERE NodeName=@machine)
END
END

以下是我用来设置参数和调用过程的代码:

        OdbcCommand Cmd = new OdbcCommand("GetNodeID", _Connection);
Cmd.CommandType = CommandType.StoredProcedure;

Cmd.Parameters.Add("@machine", OdbcType.NVarChar);
Cmd.Parameters["@machine"].Value = Environment.MachineName.ToLower();

Cmd.Parameters.Add("@ID", OdbcType.Int);
Cmd.Parameters["@ID"].Direction = ParameterDirection.Output;

Cmd.ExecuteNonQuery();
_NodeID = (int)Cmd.Parameters["@Count"].Value;

我也尝试过使用 Cmd.ExecuteScalar 但没有成功。如果我在执行命令之前中断,我可以看到 @machine 有一个值。

如果我直接从 Management Studio 执行该过程,它会正常工作。

有什么想法吗?谢谢

最佳答案

尝试替换:

OdbcCommand Cmd = new OdbcCommand("GetNodeID", _Connection);
Cmd.CommandType = CommandType.StoredProcedure;

与:

OdbcCommand Cmd = new OdbcCommand("{call GetNodeID(?,?)}", _Connection);

更多信息:

http://support.microsoft.com/kb/310130

关于c# - 存储过程上的 OdbcCommand - 输出参数出现 "Parameter not supplied"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2799405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com