2013-09-25 229 views
1

設置:SQL結果不返回C#

  • asp.net MVC
  • SQL Server 2008 R2的

我有一個過程,以獲得消息列表發送。我想更新結果記錄,所以我不會無意中將相同的記錄重複兩次。無論我如何接近它,SSMS都會生成正確的消息列表。但是,如果我使用相同的過程更新記錄,則C#不會得到任何結果。

我已經使用DataAdapter這樣的嘗試:

var da = new SqlDataAdapter(cmd); 
da.Fill(table); 

DataReader這樣的:

var dataReader = cmd.ExecuteReader(); 
table.Load(dataReader); 
dataReader.Close(); 

來填充我的DataTable,似乎都不影響使用效果。

我的過程是這樣的:

ALTER PROCEDURE [dbo].[MnxNoticeGetMessages] 
@sessionId uniqueidentifier = null 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @Output TABLE (messageid uniqueidentifier) 

INSERT INTO @Output 
SELECT messageid FROM MnxTriggerEmails WHERE dateSent is null 

SELECT * FROM MnxTriggerEmails WHERE messageid IN (SELECT messageid FROM @Output) 

UPDATE MnxTriggerEmails SET dateSent=GETDATE() 
    WHERE messageid IN (SELECT * FROM @Output) 
END 

這產生SSMS的結果,但不是在C#

如果我註釋掉UPDATE像這樣(沒有其他變化):

--UPDATE MnxTriggerEmails SET dateSent=GETDATE() 
-- WHERE messageid IN (SELECT * FROM @Output) 

我得到兩個SSMSC#預期的結果。

我錯過了什麼?什麼會造成這種情況?我如何更新記錄並同時獲得結果?

+1

您是否嘗試過使用'dataReader'的'Read()'方法來調試您的代碼? – Xint0

+0

不,您是否認爲select方法會影響DataReader的使用方式並加載信息?我沒有得到錯誤,我只是沒有在數據表中得到結果。 – davids

+0

您是否嘗試過在更新後移動選擇? –

回答

1

你的代碼看起來不錯。它應該工作。這聽起來像是你兩次調用sp。第一次改變日期,第二次不返回結果。這會導致ssms產生所需的結果,並且c#爲空。

檢查您沒有發佈的代碼,並查看在填充DataTable之前是否再次進行該調用。

+0

現在我覺得花這麼多時間很愚蠢。我將sp稱爲數據集,然後返回數據表。 – davids