c# - 存储过程在范围标识上返回 0
问题描述
我在一个旧项目上使用相同的程序并且它已经工作了一段时间,所以我无法弄清楚这个有什么问题以及为什么当我插入时它返回 0。
IF OBJECT_ID('dbo.spInsertArtigo') IS NOT NULL
DROP PROCEDURE spInsertArtigo
GO
CREATE PROCEDURE spInsertArtigo
@IdUser INT,
----- hArtigos -----
@MotivoCriacao NVARCHAR(100) = NULL,
@CodeRequest TINYINT,
@Cliente TINYINT,
@ReferenciaCliente NVARCHAR(50),
@ReferenciaInterna NVARCHAR(7),
@Indice NVARCHAR(10),
@Projecto NVARCHAR(50),
@Desenho NVARCHAR(50),
@CadenciaMensal INT,
@NumCOMDEV NVARCHAR(50),
@QTDLancamentoFormas INT,
@CapacidadeReal NVARCHAR(20) = NULL,
@Observacoes NVARCHAR(100) = NULL,
----- hCaixa -----
@TipoCaixa NVARCHAR(50) = NULL,
@QTDPecasCaixa INT = NULL,
@UnidadeProducao NVARCHAR(50) = NULL,
@CelulaProducao NVARCHAR(50) = NULL,
@Peso FLOAT,
@NumKanbansProducao INT = NULL,
----- hMetodologiaProducao
@TipoMetodologia nchar(3) = NULL,
@QTDMetodoProducao INT = NULL,
@ID INT = NULL OUTPUT
AS
BEGIN
SET NOCOUNT ON
BEGIN
INSERT INTO hArtigos (MotivoCriacao, CodeRequest, Cliente, ReferenciaCliente, ReferenciaInterna, Indice, Projecto, Desenho,
CadenciaMensal, NumCOMDEV, QTDLancamentoFormas, CapacidadeReal, Observacoes, IdUser)
VALUES (@MotivoCriacao, @CodeRequest, @Cliente, @ReferenciaCliente, @ReferenciaInterna, @Indice, @Projecto, @Desenho,
@CadenciaMensal, @NumCOMDEV, @QTDLancamentoFormas, @CapacidadeReal, @Observacoes, @IdUser)
INSERT INTO hCaixa (TipoCaixa, QTDPecasCaixa, UnidadeProducao, CelulaProducao, Peso, NumKanbansProducao, IdArtigo)
VALUES (@TipoCaixa, @QTDPecasCaixa, @UnidadeProducao, @CelulaProducao, @Peso, @NumKanbansProducao, SCOPE_IDENTITY())
INSERT INTO hMetodologiaProducao(TipoMetodologia, QTDMetodoProducao, IdArtigo)
VALUES (@TipoMetodologia, @QTDMetodoProducao, SCOPE_IDENTITY())
INSERT INTO hData(DataCriacao, DataAlteracao, IdArtigo)
VALUES (GETDATE(), GETDATE(), SCOPE_IDENTITY())
SELECT @ID = SCOPE_IDENTITY()
END
END
这是我调用程序的地方
public static INT InsertRequisicao(Requisicao req)
{
string constr = ConfigurationManager.ConnectionStrings["GestaoRequisicoes_ConnectionString"].ConnectionString;
string query = "spInsertArtigo";
try
{
using (SqlConnection con = new SqlConnection(constr))
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@IdUser", HttpContext.Current.User.Identity.Name);
cmd.Parameters.AddWithValue("@MotivoCriacao", req.MotivoCriacao);
cmd.Parameters.AddWithValue("@CodeRequest", req.CodeRequest);
cmd.Parameters.AddWithValue("@Cliente", req.Cliente);
cmd.Parameters.AddWithValue("@ReferenciaCliente", req.ReferenciaCliente);
cmd.Parameters.AddWithValue("@ReferenciaInterna", req.ReferenciaInterna);
cmd.Parameters.AddWithValue("@Indice", req.Indice);
cmd.Parameters.AddWithValue("@Projecto", req.Projecto);
cmd.Parameters.AddWithValue("@Desenho", req.Desenho);
cmd.Parameters.AddWithValue("@CadenciaMensal", req.CadenciaMensal);
cmd.Parameters.AddWithValue("@NumCOMDEV", req.NumCOMDEV);
cmd.Parameters.AddWithValue("@QTDLancamentoFormas", req.NumLancamentoFormas);
cmd.Parameters.AddWithValue("@CapacidadeReal", req.CapacidadeReal);
cmd.Parameters.AddWithValue("@TipoCaixa", req.TipoCaixa);
cmd.Parameters.AddWithValue("@QTDPecasCaixa", req.NumPecasCaixa);
cmd.Parameters.AddWithValue("@UnidadeProducao", req.UnidadeProducao);
cmd.Parameters.AddWithValue("@CelulaProducao", req.CelulaProducao);
cmd.Parameters.AddWithValue("@Peso", req.Peso);
cmd.Parameters.AddWithValue("@NumKanbansProducao", req.NumKanbansProducao);
cmd.Parameters.AddWithValue("@TipoMetodologia", req.TipoMetodologia);
cmd.Parameters.AddWithValue("@QTDMetodoProducao", req.NumMetodoProducao);
cmd.Parameters.AddWithValue("@Observacoes", req.Observacoes);
con.Open();
return Convert.ToInt32(cmd.ExecuteScalar());
}
}
catch (SqlException ex)
{
throw ex;
}
}
我认为一切看起来都不错...过程与另一个完全相同,我认为 C# 代码没有任何问题
解决方案
您需要获取输出参数的值,而不是获取 ExecuteScalar() 的 RETURN 值@ID
推荐阅读
- javascript - React Native 中箭头函数和普通函数的区别
- python - 被告知用 Python 请求死掉(ically.net 阅读电子邮件)
- mysql - laravel SQLSTATE [42S02]:找不到基表或视图:1146 表'name.system_functions'不存在
- php - 如何使用 php 获取联系表单?
- text - 在消息框中显示错误的位置
- c# - Unity 将文件移动到桌面
- sql - 旋转一列并保留 SUM、AVG、COUNT 列
- android - 我在 AdMob 控制台中的应用不再与 Google Play 关联?
- bash - 当它在环境变量中时如何使失败的命令替换退出shell
- django - Django:加入两个模型