开发者

Stored procedure fails only when executed from LINQ

I have a stored procedure that adds some rows to a table, pretty basic stuff. When I execute my stored procedure from within SQL Server Management Studio it returns fine. However when I run this from within my app and call it via LINQ to SP it seems to get into the SP fine but the process from within the SP fails. Same parameters everything looks exactly the same.

I know this isn't much to go on but does anyone have any ideas what might be causing this?

Here is my stored procedure:

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 can be lazy when evaluating queries. Are you absolutely sure your inserts are happening in the order you are trying.Given the Foreign Key error, my guess would be no.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜