2009-11-12 2 views
-2

테이블을 업데이트해야하는 저장 프로 시저가 있습니다. 직접 실행하면 "Command (s) completed successfully."가 나오지만 C#에서 호출하면 테이블이 변경되지 않습니다. 무슨 일 이니?C에서 호출 할 때 저장 프로 시저가 테이블을 업데이트하지 않음

set ANSI_NULLS ON 
set QUOTED_IDENTIFIER ON 
go 

-- ============================================= 
-- Author:  Mohamamd Ibrahim Tasal 
-- Create date: 29-Octobar-2009 
-- Description: This procedure is releasing Numbers.... 
-- ============================================= 
ALTER PROCEDURE [dbo].[Release_MassMSISDN] 
(
    @Quantity int, 
    @_SCP  int 

) 
AS 
BEGIN 
SET NOCOUNT ON; 
set @Quantity=1; 
set @_SCP=798000070; 
DECLARE @_Filter nvarchar(1000) 
DECLARE @sql nvarchar(4000) 
IF @_SCP = 2 
SET @_Filter = 'MSISDN LIKE ''799%'' OR MSISDN LIKE ''798%''' 
IF @_SCP = 1 
SET @_Filter = 'MSISDN LIKE ''797%'' OR MSISDN LIKE ''796%'' OR MSISDN LIKE ''7950%'' OR MSISDN LIKE ''7951%'' OR MSISDN LIKE ''7952'' OR MSISDN LIKE ''7953%'' OR MSISDN LIKE ''7954%''' 
IF @_SCP = 3 
SET @_Filter = 'MSISDN LIKE ''794%''' 
IF @_SCP = 4 
SET @_Filter = 'MSISDN LIKE ''793%''or MSISDN LIKE ''7955%'' OR MSISDN LIKE ''7956%'' OR MSISDN LIKE ''7957%'' or MSISDN LIKE ''7958%'' OR MSISDN LIKE ''7959%''' 

UPDATE 
    MSISDN_Master 
    SET 
    IMSI_HLR=NULL, 
    IMSI_IN=NULL, 
    GoldNumber=0, 
    SERIAL=NULL, 
    FK_AllocationTypeID = NULL, 
    FK_ProfileTypeID = NULL, 
    FK_ModelTypeID = NULL, 
    FK_StatusID = NULL, 
    FK_BatchID = NULL, 
    Activation_Date = NULL, 
    Locked = 0, 
    ICBlocked = 0, 
    langcur = NULL, 
    Credit = NULL 
WHERE msisdn in ('SELECT TOP '+ CAST(@quantity AS varchar(10)) + ' MSISDN,IMSI_HLR,IMSI_IN,Serial,FK_BatchID BatchID,FK_AllocationTypeID AllocationTypeID,FK_ProfileTypeID ProfileTypeID,FK_ModelTypeID ModelTypeID,Activation_Date FROM MSISDN_Master 
where imsi_hlr not like ''412%'' and imsi_hlr not like ''GOL%'' and imsi_hlr is not null and imsi_in is not null AND ('+ @_Filter +') ORDER BY MSISDN') 

END 
+2

천천히 숨을 내쉬고 다시 시도하십시오. 이번에는 명확한 질문이 있습니다. "이 붙여 넣은 코드는 왜 작동하지 않습니까?" 그 중 하나가 아닙니다. – Schwern

+1

"porcedure", "doest", "becouse"및 실제 질문이나 설명이없는 SQL의 긴 덤프. 고마워, 제출자. – abelenky

+3

C# 코드는 어떻게 생겼습니까? – jrcs3

답변

1

사용할 수있는 디버깅 옵션을 확인해야합니다. 나는 당신이 바로 그것을 C#에서 SQL 스토어드 프로 시저로 바로 디버깅 할 수 있다고 생각한다. 이 일을 직접 해봐야하지 않았지만 할 수 있다고 들었습니다.

실제로 UPDATE WHERE 절의 SELECT를 실행하는 동등한 저장 프로 시저를 실제로 설정하여 실제로 레코드가 다시 생성되는지 확인하고 변경할 것으로 예상되는 열이 변경하려는 값과 다른 경우 .

물론 연결 문자열이 올바른 데이터베이스를 가리키고 있는지 확인하십시오. 그 사람은 전에 한 번 나를 잡았습니다 (그리고 너무 embaressing).

그렇지 않으면 다른 사람들이 제안하는 것처럼 좀 더 많은 컨텍스트와 C# 코드가 유용 할 것입니다. 행이 수정되는 이유는 무엇입니까? SQL에 행이 수정되었거나 그 명령이 실행 되었습니까?

0

저장 프로 시저를 직접 실행할 때 테이블이 올바르게 업데이트되었는지 확신합니까?

C# 코드에서 저장 프로 시저를 호출하기 전에 트랜잭션을 시작할 수 있지만 이후에 트랜잭션을 커밋 할 수 있습니까?

관련 문제