c# - SQL Server 行更新上的 ExecuteScalar

标签 c# sql

我无法从 SQL Server 获取带有刚刚更新的行的 ID 的返回值。

我想获取我刚刚更新的行的 ID,以便在以下查询中使用,但是当我执行此方法时,第一个 T-SQL 语句会很好地更新行,但对象 activeRecord 会没有得到返回的行号(无值)

如果我直接在 SQL 中运行 T-SQL 语句,我会得到一个返回值。我在我的代码的其他地方使用了 ExecuteScalar 没有问题。

我在这里错过了什么?

if (Regex.IsMatch(Encoding.ASCII.GetString(udpMessageReceived), "Valitating"))
{
   //a device is validating itself following endpoint registration
   string[] splitaction = Encoding.ASCII.GetString(udpMessageReceived).Split(deliminator);

   using (var conn = new SqlConnection(Globals.ConnectionString))
   {
       conn.Open();
       object activeRecord;

       using (var comm = new SqlCommand("UPDATE oView_MachineRegister SET validated= 1 where hostname= @hostname; SELECT ID = SCOPE_IDENTITY()", conn))
       {
           comm.Parameters.AddWithValue("datenow", DateTime.Now);
           comm.Parameters.AddWithValue("hostname", splitaction[1]);

           activeRecord = comm.ExecuteScalar();
       }

       using (var comm2 = new SqlCommand("DELETE from oView_OutBoundMessageQ WHERE machines = @activerecord AND command = 'Validate'", conn))
       {
           comm2.Parameters.AddWithValue("activerecord", activeRecord);
           comm2.ExecuteNonQuery();
       }

       conn.Close();
    }
}

最佳答案

SQL: Update a row and returning a column value with 1 query 上找到了答案

将查询更改为:

UPDATE oView_MachineRegister SET validated = 1 OUTPUT INSERTED.id WHERE hostname = @hostname

现在它返回最后更新的 ID

关于c# - SQL Server 行更新上的 ExecuteScalar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12290062/

相关文章:

c# - 如何检查是否已从 C# 安装了 Windows QFE/补丁?

php - 如何在索引上仅显示 1 行

SQL 通过多个列从表中选择不同的行,忽略列顺序(意义)

mysql - 一个纬度/经度坐标与使用 SQL 的固定坐标之间的近似距离

sql - 我该如何优化这个查询?

c# - 使用 LINQ2SQL DataContext 表作为其 ItemsSource 时使用 DataGrid 的正确方法(最佳实践)

c# - 通过c#发送传真

c# - Xamarin PCL库和Sqlite数据存储

sql - 高效的 SQL 测试查询或验证查询将适用于所有(或大多数)数据库

c# - Visual Studio 2010 调试 sp1 中的错误