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执行该过程,它可以正常工作.
有什么想法吗?谢谢
尝试更换:
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