2013-09-25 184 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