1

设置:

  • ASP.NET MVC
  • SQL 服务器 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)

SSMS我在和中都得到了预期的结果C#

我错过了什么?什么会导致这个?如何更新记录并同时获得结果?

4

1 回答 1

1

你的代码看起来不错。它应该工作。这几乎听起来像你两次调用 sp 。第一次更改日期,第二次不返回任何结果。这将导致 ssms 产生所需的结果并且 c# 为空。

检查您尚未发布的代码,看看您是否在填充 DataTable 之前再次进行了该调用。

于 2013-09-25T20:35:10.493 回答