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

标签 c# sql-server-2005 stored-procedures odbc

我正在尝试执行存储过程(通过 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/

相关文章:

没有长度的SQL存储过程参数

c# - 一棵树应该只有一个根节点吗

C# 3.0 对象初始化 - 是否有对象正在初始化的通知?

sql-server-2005 - Delphi - BOF 或 EOF 为真,或者当前记录已被删除

asp.net - 在SQLDatasource中使用存储过程时,Gridview不显示

mysql - SQL IF ELSE 语句不执行

c# - 更新 LINQ 子句中的属性会破坏与 UI 的数据绑定(bind)

javascript - 使用 javascript 自动选择下拉列表并运行 jquery

c# - 获取值存储过程 C#

sql - 如何使用sql获取前一天的记录?