【问题标题】:Getting output parameter from SqlCommand returns null从 SqlCommand 获取输出参数返回 null
【发布时间】:2015-02-19 14:13:56
【问题描述】:

我有这段代码:

using (SqlCommand cmd = new SqlCommand())
{
   cmd.Connection = connection;
   cmd.CommandText = "UPDATE S " +
                     "SET S.WebId = S.WebId + 1 " +
                     "OUTPUT DELETED.WebId " +
                     "FROM jcdSetting S";
   SqlParameter parameter = cmd.Parameters.Add("@id", SqlDbType.Int);
   parameter.Direction = ParameterDirection.Output;
   int i = cmd.ExecuteNonQuery();
   webId = Convert.ToInt32(cmd.Parameters["@id"].Value);
}

由于某种原因,最后一行失败了,我尝试访问的参数始终是DbNull。我已经在 Management Studio 中尝试过查询,它返回的值很好。

我检查了ExecureNonQuery 的返回值,它也按预期返回了 1。我完全迷路了。

任何帮助将不胜感激。

【问题讨论】:

  • 正如其他人指出的那样,OUTPUT 没有定义输出参数(那些仅用于存储过程);而是检查结果集。顺便说一句,您的UPDATE 没有WHERE。这只有在jcdSetting 只有一行时才能正常工作,否则你会得到一个更新值的表。
  • 表格只有一行,所以没有问题:-)

标签: c# sql sql-server-2008


【解决方案1】:

update 语句中使用output 等效于选择,而从您发布的代码中,您希望它出现在名为@id 的输出参数中。

@id 来自哪里?你还没有在任何地方定义它。

output 在您使用的方法中将返回一个行集,而不是一个标量值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多