You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用T-SQL存储过程时C#读取输出参数始终为0的问题

问题分析与解决

你的C#代码存在两个关键错误,导致读取到错误的0值:

  1. 参数方向设置错误:存储过程中的@Stato是Output输出参数,但你错误地将其Direction设为ReturnValue——这个枚举对应的是存储过程通过RETURN语句返回的整数值,和Output参数完全是两个概念。

  2. 重复添加同名参数:你先后添加了两次@Stato参数,第一次是作为ReturnValue参数,第二次用AddWithValue传入初始值-99,这会导致参数集合混乱,SQL Server无法正确识别输出参数的位置。

修正后的C#代码

SqlCommand cmd = new SqlCommand("GetStateTorbaLabel", connection);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
// 添加输入参数
cmd.Parameters.AddWithValue("@IDTorbaLabel", 43);
// 添加输出参数,设置正确的方向
SqlParameter outParameter = cmd.Parameters.Add("@Stato", System.Data.SqlDbType.Int);
outParameter.Direction = System.Data.ParameterDirection.Output;
// 如果需要设置初始值(和SSMS测试一致),直接给Value赋值即可,不用重复加参数
outParameter.Value = -99;

cmd.ExecuteNonQuery();

StatoTorbaLabel = Convert.ToInt32(outParameter.Value);

关键修正点说明

  • 移除了重复的cmd.Parameters.AddWithValue("@Stato", -99),改为直接给输出参数的Value属性赋值初始值
  • 将Direction从ReturnValue改为ParameterDirection.Output,匹配存储过程中参数的定义
  • 确保参数集合中每个参数唯一,避免SQL Server解析参数时出现歧义

这样修改后,就能正确读取存储过程输出的@Stato值了。

内容的提问来源于stack exchange,提问作者Riccardo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:02