2

我有一个 SqlCommand ,它运行一个包含两个整数输出参数的存储过程。就在 SqlCommand 运行之前,我可以看到输出参数设置为正确的值,但是当命令实际执行时,无论我将参数设置为什么,它对 parameter1 使用 NULL,对 parameter2 使用 0(使用 SQL Profiler 验证) .

代码的简化版本是这样的:

foreach (KeyValuePair<string, object> parameter in outputParameters)
{
    SqlParameter param = new SqlParameter(parameter.Key, parameter.Value);
    param.Direction = ParameterDirection.Output;
    command.Parameters.Add(param);
}

command.ExecuteNonQuery();

我在这里对两件不同的事情感到困惑:

1)为什么不使用参数中的值?我可以在前面放置一个断点,command.ExecuteNonQuery()然后查看 command.Parameters 列表的输出参数设置是否正确,但是 SQL 探查器跟踪在执行查询时具有不同的参数。

2) 两个参数都是整数,定义方式完全相同——为什么一个设置为 NULL 而另一个设置为 0?

4

2 回答 2

4

您希望将方向更改为 InputOutput(每个操作编辑)而不是输出。

When you reference output parameters you are telling the code that the values should return from the actual stored procedure rather then from your code. Even if your code contains a value, your code actually doesn't care what those values are as you specified output parameters.

Here's what it should be:

foreach (KeyValuePair<string, object> parameter in outputParameters)
{
    SqlParameter param = new SqlParameter(parameter.Key, parameter.Value);
    param.Direction = ParameterDirection.InputOutput;
    command.Parameters.Add(param);
}

command.ExecuteNonQuery();
于 2010-08-03T14:21:23.420 回答
3

它们是输出参数——即该值来自存储过程……从逻辑上讲,它们没有输入值。如果您希望在存储过程中使用来自客户端的值,它们的方向应该是InputOutput.

编辑:回复您的评论 -Output意味着只是输出。Input意味着只是输入。InputOutput意味着两种方式。听起来你想要两种方式,所以使用InputOutput.

至于为什么一个是空的,另一个不是......老实说,我不知道。

于 2010-08-03T14:21:02.213 回答