【发布时间】:2010-05-09 22:18:55
【问题描述】:
我正在尝试执行存储过程(通过 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
以下是我用来设置参数和调用过程的代码:
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 执行该过程,它可以正常工作。
有什么想法吗?谢谢
【问题讨论】:
-
调试时你的ID参数有什么值?
标签: c# sql-server-2005 stored-procedures odbc