2011-08-12 24 views
1

テーブルにいくつかの行、かなり基本的なものを追加するストアドプロシージャがあります。 SQL Server Management Studioからストアドプロシージャを実行すると、正常に戻ります。しかし、私はこれを私のアプリの中から実行し、LINQを介してSPに呼び出すとSPにうまくいくように見えるが、SP内からのプロセスは失敗する。同じパラメータがすべて同じに見えます。ストアドプロシージャがLINQから実行された場合にのみ失敗する

これはあまり進んでいないことは知っていますが、誰かがこれを引き起こしている可能性のあるアイデアはありますか?

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), 
     [email protected]  = 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,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Part# 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @P = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Ser# 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @S = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Lot# 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @L = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Desc 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @D = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Fed Code 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @F = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Item Code 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @C = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Price 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @M = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --UOM 
    Select @TLoc = CharIndex('\t',@HdwString,@TLoc+1) 
    Select @I = Substring(@HdwString,@StartLoc,@[email protected]) 
    Select @StartLoc = @TLoc + 2 
    --Qty 
    Select @TLoc = CharIndex('\r\n',@HdwString,@TLoc+1) 
    Select @Q = Substring(@HdwString,@StartLoc,@[email protected]) 

    --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, 
      [email protected] = 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 
*/ 
+0

どのように失敗しますか?エラーは何ですか? – JohnD

+0

LINQ-to-SQLから実行すると、エラー、メッセージ、*何か*が出ますか? –

+0

最後にエラーが見つかりましたが、それを見つけるためにしばらく時間がかかりましたが、Fk制約のように見えます。私はDBMLが違うと推測しているので、私は試してみようとしています。 –

答えて

0

クエリを評価するときにLINQのは怠惰になります。ここ

は私のストアドプロシージャです。あなたはあなたのインサートがあなたが試している順番で起こっていることを絶対に確信していますか?外来キーのエラーを考えると、私の推測はノーとなります。

関連する問題