存储过程的Odbc命令 - 输出参数上的"参数未提供"错误

Aar*_*ron 2 c# odbc stored-procedures sql-server-2005

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

过程或函数'GetNodeID'需要参数'@ID',这是未提供的.

@ID是我的过程的OUTPUT参数,有一个输入@machine,它被指定并在存储过程中设置为null:

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
Run Code Online (Sandbox Code Playgroud)

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

        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;
Run Code Online (Sandbox Code Playgroud)

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

如果我直接从Management Studio执行该过程,它可以正常工作.

有什么想法吗?谢谢

Moe*_*sko 7

尝试更换:

OdbcCommand Cmd = new OdbcCommand("GetNodeID", _Connection);
Cmd.CommandType = CommandType.StoredProcedure;
Run Code Online (Sandbox Code Playgroud)

用:

OdbcCommand Cmd = new OdbcCommand("{call GetNodeID(?,?)}", _Connection);
Run Code Online (Sandbox Code Playgroud)

更多信息 :

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