Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储过程仅在从LINQ执行时失败_Linq_Stored Procedures - Fatal编程技术网

存储过程仅在从LINQ执行时失败

存储过程仅在从LINQ执行时失败,linq,stored-procedures,Linq,Stored Procedures,我有一个存储过程,可以向表中添加一些行,这是非常基本的东西。当我在SQLServerManagementStudio中执行存储过程时,它返回的结果很好。但是,当我在应用程序中运行此程序并通过LINQ呼叫SP时,它似乎进入了SP,但SP中的进程失败。相同的参数一切看起来都完全相同 我知道这没什么大不了的,但有没有人知道是什么原因造成的 以下是我的存储过程: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON GO ALTER procedure [dbo].[sp

我有一个存储过程,可以向表中添加一些行,这是非常基本的东西。当我在SQLServerManagementStudio中执行存储过程时,它返回的结果很好。但是,当我在应用程序中运行此程序并通过LINQ呼叫SP时,它似乎进入了SP,但SP中的进程失败。相同的参数一切看起来都完全相同

我知道这没什么大不了的,但有没有人知道是什么原因造成的

以下是我的存储过程:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[sp_PTS_Action_Hardware_Batch_Insert] (
@HdwString  Varchar(Max),
@UID        Varchar(15)
)
as
Declare     @Success_Nbr    Bit
Select      @Success_Nbr    = 0
Declare     @Success_Desc   Varchar(100)
Declare     @Stuff          Varchar(200)
Declare     @TLoc           BigInt
declare     @retV            int
--Declare   @RLoc           BigInt
Declare     @StartLoc       BigInt
Declare     @SLen           BigInt

Declare     @V  Varchar(25)
Declare     @P  Varchar(50)
Declare     @S  Varchar(50)
Declare     @L  Varchar(50)
Declare     @D  Varchar(200)
Declare     @F  Varchar(4)
Declare     @C  Varchar(50)
Declare     @M  Varchar(50)
Declare     @I  Varchar(20)
Declare     @Q  Varchar(10)
/*
Declare     @Req_Voucher_Number varchar(25),
Declare     @Part_Number        varchar(50),
Declare     @Serial_Number      varchar(50),
Declare     @Lot_Number         varchar(50),
Declare     @Description        varchar(200),       
Declare     @Federal_Class_Code varchar(4),
Declare     @Unit_Of_Issue      varchar(5),
Declare     @Item_Code_ID       int,
Declare     @Unit_Price         money,
Declare     @Qty                decimal(7, 2),
Declare     @UID                Varchar(15)
*/
Declare     @Item_Code_ID       int
Declare     @Unit_Price         money
Declare     @Qty                decimal(7, 2)

If IsNull(@HdwString,'') = ''
   BEGIN
    Select  @Success_Desc = 'No Data Provided.'
    Goto ExitProcedure
   END

If IsNull(CharIndex('\t',@HdwString,1),0)= 0
   BEGIN
    Select  @Success_Desc = 'No Delimeter Defined.'
    Goto ExitProcedure
   END
If IsNull(CharIndex('\r\n',@HdwString,1),0)= 0
   BEGIN
    Select  @Success_Desc = 'No Row End Defined.'
    Goto ExitProcedure
   END

EXEC sp_FIX_DoubleQuotesMax @HdwString OUTPUT
/*
DECLARE @DD1149_Hdw TABLE (
    [Req_Voucher_Number] [varchar](25),
    [Part_Number] [varchar](50),
    [Serial_Number] [varchar](50),
    [Lot_Number] [varchar](50),
    [Description] [varchar](200),
    [Federal_Class_Code] [varchar](4),
    [Item_Code_Desc] [varchar](50),
    [Unit_Price] [money] NOT NULL,
    [Unit_Of_Issue] [varchar](20)  NOT NULL,
    [Qty] [decimal](7, 2) NOT NULL
)
*/
Select  @StartLoc   = 1,
        @SLen       = Len(@HdwString),
        --@RLoc     = CharIndex('\r\n',@HdwString,1),
        @TLoc       = CharIndex('\t',@HdwString,1)

BEGIN TRANSACTION

Looper:
--End Of File?
IF @TLoc = 0
   BEGIN
    --Select 'This is the stub where the parsed date would then be pushed to the PTS_DD1149_Hardware table.'
    goto ProcessTransaction
    --Add Records To Hardware Table
/*
    IF @@ERROR != 0
       BEGIN
        ROLLBACK TRANSACTION
        Select  @Success_Desc = 'There was a problem adding the hardware.  No records were added.'
       END
    ELSE
       BEGIN
        COMMIT TRANSACTION
        Select  @Success_Desc = 'There was a problem adding the hardware.  No records were added.'
       END
    Goto ExitProcedure
*/
   END

ELSE
   BEGIN
    --ReqVoucher#
    Select  @V = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Part#
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @P = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Ser#
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @S = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Lot#
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @L = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Desc
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @D = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Fed Code
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @F = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Item Code
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @C = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Price
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @M = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --UOM
    Select  @TLoc = CharIndex('\t',@HdwString,@TLoc+1)
    Select  @I = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)
    Select  @StartLoc = @TLoc + 2
    --Qty
    Select  @TLoc = CharIndex('\r\n',@HdwString,@TLoc+1)
    Select  @Q = Substring(@HdwString,@StartLoc,@TLoc-@StartLoc)

    --SELECT    @V, @P, @S, @L, @D, @F, @C, @M, @I, @Q

    IF Not Exists(Select * From Unit_Of_Issue Where Unit_Of_Issue = @I)
        IF Not Exists(Select * From Unit_Of_Issue Where UI_Description = @I)
           BEGIN
            ROLLBACK TRANSACTION
            Goto ExitProcedure
           END
        ELSE
            Select  @I = Unit_Of_Issue From Unit_Of_Issue Where UI_Description = @I

    IF Not Exists(Select * From PTS_Item_Codes Where Item_Code = @C)
       BEGIN
        ROLLBACK TRANSACTION
        Goto ExitProcedure
       END
    ELSE
        Select  @Item_Code_ID = Item_Code_ID From PTS_Item_Codes Where Item_Code = @C

    IF @@ERROR != 0
       BEGIN
        ROLLBACK TRANSACTION
        Goto ExitProcedure
       END

    Select  @Unit_Price = Convert(Money,@M), @Qty = Convert(decimal(7,2),@Q)
    IF @@ERROR != 0
       BEGIN
        ROLLBACK TRANSACTION
        Goto ExitProcedure
       END

    --Select    5, @V, @P, @S, @L, @D, @F, @M, @Item_Code_ID, @Unit_Price, @Qty, @UID
    exec @retV = sp_PTS_Action_DD1149_Insert_Hardware_No_RecSet @V, @P, @S, @L, @D, @F, @I, @Item_Code_ID, @Unit_Price, @Qty, @UID
    IF @retV != 1
       BEGIN
        ROLLBACK TRANSACTION
        Goto ExitProcedure
       END
    --Add To Table
    --INSERT    @DD1149_Hdw
    --SELECT    @V, @P, @S, @L, @D, @F, @C, @M, @I, @Q

    --Testing
    --Select * from @DD1149_Hdw

    --Select    @V, @P, @S, @L, @D, @F, @C, @M, @I, @Q

    --Reset Variables
    Select  @StartLoc = @TLoc + 4,
            --@RLoc = CharIndex('\r\n',@HdwString,@TLoc+3),
            @TLoc       = CharIndex('\t',@HdwString,@TLoc+3),
            @V          = NULL,
            @P          = NULL,
            @S          = NULL,
            @L          = NULL,
            @D          = NULL,
            @F          = NULL,
            @C          = NULL,
            @M          = NULL,
            @I          = NULL,
            @Q          = NULL,
            @Unit_Price = NULL,
            @Qty        = NULL,
            @retV       = NULL

   END

Goto Looper

ProcessTransaction:
    COMMIT TRANSACTION

    Select  @Success_Nbr = 1

ExitProcedure:

If @Success_Nbr = 0
    Select Convert(Varchar(7),'Failed') as Success_Desc
Else
    Select Convert(Varchar(7),'Success') as Success_Desc

--Select    @Success_Nbr as Success_Nbr
/*
Select  @Success_Nbr as Success_Nbr,
        @Success_Desc as Success_Desc,
        *
From    @DD1149_Hdw
*/

Linq在计算查询时可能会很懒。您是否绝对确定插入的顺序与您尝试的顺序一致。鉴于外键错误,我的猜测是否。

它是如何失败的?错误是什么?当您从LINQ到SQL执行它时,是否会收到任何错误、消息或其他信息?最后,我发现了一个错误,花了一段时间才找到它,但它看起来像Fk约束。我猜我的DBML是不同的,所以我要尝试一下。下面是错误:“INSERT语句与外键约束“FK_PTS_DD1149_Hardware_PTS_DD1149”冲突。冲突发生在数据库“OneEVAHdw”、表“dbo.PTS_DD1149”、列“Req_凭证号”中。DBML更新没有影响它。但是我在ManagementStudio中运行了完全相同的exec,它可以工作,但是如果我尝试使用LINQ从我的项目中运行它,它会抛出错误。