G鑫莹 2022-07-11 14:36 采纳率: 0%
浏览 53
已结题

SQLserver 存储过程返回了异常值

SQLserver 存储过程返回了异常值
写了一个写主表和子表的存储过程,该存储过程在数据库执行时一切正常,写成功返回1,失败返回2。但是在winform界面调用时,不管写正确还是错误都返回数字3,就很奇怪,求解决。

winform界面的代码
public int StockInConfrimNoManifest(string sino, string username, string barcode, Entry_StockInDetail stockInDetail)
{
int ret = 0;
string sqlStr = "STOCK_IN_OP_NOMANIFEST";
string time = stockInDetail.ProductTime.ToString();
Dictionary<int, SqlParaStruct> paraList = new Dictionary<int, SqlParaStruct>();
paraList.Add(0, new SqlParaStruct("@SINo", sino, SqlParaType.ParaDataType_String, ParameterDirection.Input));
paraList.Add(1, new SqlParaStruct("@UserName", username, SqlParaType.ParaDataType_String, ParameterDirection.Input));
paraList.Add(2, new SqlParaStruct("@Model", stockInDetail.Model, SqlParaType.ParaDataType_String, ParameterDirection.Input));
paraList.Add(3, new SqlParaStruct("@InQuantity", stockInDetail.InQuantity, SqlParaType.ParaDataType_Int, ParameterDirection.Input));
paraList.Add(4, new SqlParaStruct("@ProductTime", time, SqlParaType.ParaDataType_String, ParameterDirection.Input));
paraList.Add(5, new SqlParaStruct("@BarCode", barcode, SqlParaType.ParaDataType_String, ParameterDirection.Input));

        try
        {
            using (IDataAccess ida = DataAccessFactory.getInstence())
            {
                ida.EnterQuery();
                ret = ida.ExecuteProcedure(sqlStr, paraList);//1成功 2失败
                ida.LeaveQuery();
            }
        }
        catch (Exception ex)
        {
            Logger.Error(string.Format("[数据库]关闭数据库连接异常:{0}{1}",
                ex.Message.ToString(), ex.StackTrace.ToString()));
        }
        return ret;         
    }

//SQLserver代码
USE [SMS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[STOCK_IN_OP_NOMANIFEST]
@SINo NVARCHAR(50),
@UserName NVARCHAR(50),
@Model NVARCHAR(50),
@InQuantity Int,
@ProductTime NVARCHAR(50),
@BarCode NVARCHAR(50)

AS
BEGIN
DECLARE @RET INT
SET @RET = 1;-- 0成功 2失败
DECLARE @SIID INT
SET @SIID = 0;
DECLARE @Listcount INT
SET @Listcount = 1;
DECLARE @GID INT;
DECLARE @CNo INT;
DECLARE @GridNo NVARCHAR(50);

BEGIN TRANSACTION;--开启事务

SELECT @SIID=SIID FROM [SMS].[dbo].[SMS_StockIn] WHERE SINo = @SINo;    
--if写主表

IF @SIID = 0
BEGIN
INSERT INTO [SMS].[dbo].[SMS_StockIn] (
[SINo]
,[UserName]
,[BeginTime]
,[EndTime]
,[UpdateTime]
,[ListCount]
,[DisponseCount])VALUES(@SINo, @UserName, GETDATE(), GETDATETIME(), GETDATE(), @Listcount, @Listcount)SELECT @@IDENTITY;

  SET @Listcount = @Listcount+1;
  IF @@ERROR <>0
   begin
    SET @RET = 2
   end;

  INSERT INTO [SMS].[dbo].[SMS_StockInDetail]
   ([ListNo]
  ,[SIId]
  ,[Model]
  ,[InQuantity]
  ,[ProductTime]
  ,[whetherIn]
  ,[InTime]
  ,[UpdateTime])VALUES(
  1,
  @@IDENTITY,
  @Model,
  @InQuantity,
  @ProductTime,
  1,
  GETDATE(),
  GETDATE());

  IF @@ERROR <>0
   begin
    SET @RET = 2;
   end;

   --写库存
   SELECT @GID = [GID], @CNo = [CNo], @GridNo = [GridNo] FROM [SMS].[dbo].[SMS_CabinetGrid] WHERE [GBarCode] = @BarCode;
   IF (@GID is null)
   begin
    SET @RET = 2;
   end;
   INSERT INTO [SMS].[dbo].[SMS_Storage] (
   [GID]
  ,[CNo]
  ,[GridNo]
  ,[GBarCode]
  ,[ManufacturerNumber]
  ,[SupplierNumber]
  ,[MaterialName]
  ,[Model]
  ,[StorageQuantity]
  ,[ProductTime]
  ,[BatchNo]
  ,[UpdateTime])VALUES(
  @GID,
  @CNo,
  @GridNo,
  @BarCode,
  null,
  null,
  null,
  @Model,
  @InQuantity,
  @ProductTime,
  null,
  GETDATE())
  IF @@ERROR <>0
   begin
    SET @RET = 2;
   end;

END

ELSE
BEGIN
--else写子表
SELECT @Listcount = COUNT(*) FROM [dbo].[SMS_StockInDetail] WHERE SIID = @SIID;
IF (@Listcount is null)
begin
SET @RET = 2;
end;

INSERT INTO [SMS].[dbo].[SMS_StockInDetail]
   ([ListNo]
  ,[SIId]
  ,[Model]
  ,[InQuantity]
  ,[ProductTime]
  ,[whetherIn]
  ,[InTime]
  ,[UpdateTime])VALUES(
  @Listcount+1,
  @SIID,
  @Model,
  @InQuantity,
  @ProductTime,
  1,
  GETDATE(),
  GETDATE());

  --更新主表
  IF @@ERROR = 0
   begin
     UPDATE [SMS].[dbo].[SMS_StockIn] SET ListCount = @Listcount+1 WHERE SIID = @SIID;
    if @@ERROR <>0
    begin
    SET @RET = 2;
    end;
  End;

  SELECT @GID = [GID], @CNo = [CNo], @GridNo = [GridNo] FROM [SMS].[dbo].[SMS_CabinetGrid] WHERE [GBarCode] = @BarCode;
  IF (@GID is null)
   begin
    SET @RET = 2;
   end;
   INSERT INTO [SMS].[dbo].[SMS_Storage] (
   [GID]
  ,[CNo]
  ,[GridNo]
  ,[GBarCode]
  ,[ManufacturerNumber]
  ,[SupplierNumber]
  ,[MaterialName]
  ,[Model]
  ,[StorageQuantity]
  ,[ProductTime]
  ,[BatchNo]
  ,[UpdateTime])VALUES(
  @GID,
  @CNo,
  @GridNo,
  @BarCode,
  null,
  null,
  null,
  @Model,
  @InQuantity,
  @ProductTime,
  null,
  GETDATE())
  IF @@ERROR <>0
   begin
    SET @RET = 2;
   end;

END
IF @RET = 2
BEGIN
ROLLBACK
END;

 ELSE
  COMMIT;

print @RET;
RETURN @RET;

END

  • 写回答

2条回答 默认 最新

  • Hello World, 2022-07-11 16:11
    关注

    ida.ExecuteProcedure里是怎么写的?

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月12日
  • 创建了问题 7月11日

悬赏问题

  • ¥50 计算机组成原理单周期mips处理器(logisim)
  • ¥15 sap for java
  • ¥15 如何添加系统级别的屏幕边框
  • ¥100 图像处理,如何优化使得清晰
  • ¥15 请求看看这个仿真电路哪里有问题?
  • ¥100 关于python拓展屏使用pyautogui.screenshot无法截图的问题
  • ¥15 有偿求答 无导出权限怎么快速导出企业微信微文档
  • ¥15 求解答,怎么数码管中这么加入闹钟或者传感器,这应该怎么加入相应的代码
  • ¥15 scottplot5
  • ¥30 想问问这个建模怎么编程没有思路