繁体   English   中英

SQL Server-更新表并返回更新的行

[英]SQL Server - Update table and return the Updated rows

我有一个SQL Server数据库,里面有很多信息。

我想在单个查询中选择前50行(我这样做了,没有问题),但是随后我想将列从false更新为true,所以下次我选择不选择相同的行时,我的代码如下所示:

string Command = "UPDATE HubCommands SET [Alreadytaken] = 'true' FROM (SELECT TOP 50 [CommandId],[DeviceId],[Commandtext], [HashCommand],[UserId]  FROM HubCommands) I WHERE [HubId] = '18353fe9-82fd-4ac2-a078-51c199d9072b'";

using (SqlConnection myConnection = new SqlConnection(SqlConnection))
{
    using (SqlDataAdapter myDataAdapter = new SqlDataAdapter(Command, myConnection))
    {
        DataTable dtResult = new DataTable();

        myDataAdapter.Fill(dtResult);

        foreach (DataRow row in dtResult.Rows)
        {
            Guid CommandId, DeviceId, UserId;
            Guid.TryParse(row["CommandId"].ToString(), out CommandId);
            Guid.TryParse(row["DeviceId"].ToString(), out DeviceId);
            Guid.TryParse(row["UserId"].ToString(), out UserId);

            Console.WriteLine("CommandId" + CommandId);
        }
    }
}

这段代码确实有效,并且可以更新我要求更新的内容,但是我在数据表中什么也没得到,就像它总是在更新但没有选择一样。

如果我进行正常选择,它可以正常工作并提供信息。

有谁知道如何在单个查询中更新并获取一些数据?

所以你的问题是:

如何使用C#更新SQL Server中的表并将真正更新的行作为DataTable返回?

首先 ,您的查询中有多个问题。

您应该使用10 ,而不是true或false。 SQL-Server具有bit数据类型,而不是Boolean

其次 ,这是您应该如何构造查询的方法:

DECLARE @IDs TABLE
(
    [CommandId] uniqueidentifier
);

INSERT INTO @IDs
SELECT [CommandId] FROM HubCommands
WHERE [HubId] = '18353fe9-82fd-4ac2-a078-51c199d9072b' AND [Alreadytaken] = 0;

UPDATE HubCommands 
SET [Alreadytaken] = 1
WHERE CommandId IN
(
    SELECT [CommandId] FROM @IDs
);

SELECT * FROM HubCommands 
WHERE CommandId IN
(
    SELECT [CommandId] FROM @IDs 
);

将以上所有内容包装在一个字符串中,并使用SqlDataReader 在这种情况下,不需要适配器(因为我们正在混合命令,这与适配器通常所做的不同):

var sqlCommand = new SqlCommand(Command, myConnection);
SqlDataReader dataReader = sqlCommand.ExecuteReader();

DataTable dtResult = new DataTable();
dtResult.Load(dataReader);

我强烈建议您创建一个存储过程,将HubId作为参数来完成上述所有工作。 它更整洁,更易于维护。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM