我正在尝试执行存储过程(通过 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);
更多信息:
关于c# - 存储过程上的 OdbcCommand - 输出参数出现 "Parameter not supplied"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2799405/