2009-11-12 68 views
-2

我有一個應更新表的存儲過程。當我直接運行它時,我得到「命令(s)成功完成」,但是當從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 2009-11-12 04:56:07

+1

「porcedure」,「doest」,「becouse」,並沒有真正的問題或解釋,只是一個冗長的SQL轉儲。非常感謝提交者。 – abelenky 2009-11-12 04:57:02

+3

C#代碼的外觀如何? – jrcs3 2009-11-12 05:01:23

回答

1

你應該看看可用的調試選項。我相信如果你將它設置正確,你可以直接從你的C#調試到你的SQL存儲過程。從來沒有必要這樣做,但我被告知它可以完成。

另外設置了一個等價的存儲過程,只執行UPDATE的WHERE子句的SELECT,以查看是否實際獲取任何記錄,以及如果您希望更改的列與您希望更改它們的值不同。

當然,檢查連接字符串是否指向正確的數據庫。那個在我以前曾經吸引過我(並且如此令人窒息)。否則,正如其他人所暗示的,更多的上下文和C#代碼將會很有用。什麼讓你確定行被修改。 SQL提到的行是否被修改過,或者只是執行了這些命令?

0

當您直接運行存儲過程時,您確定該表是否已正確更新?

是否有可能在您的C#代碼中,在調用存儲過程之前開始事務,但之後再也不提交?