我无法从 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/