我無法從SQL Server獲取返回值與它剛剛更新的行的ID。ExecuteScalar在SQL Server行更新
我想獲得我剛剛更新以在下面的查詢中使用的行的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();
}
}
沒有,還是沒有回報 – Damo
SCOPE_IDENTITY是在最後插入同樣的範圍。做一個選擇語句以按日期和主機獲取密鑰,然後將其用於更新並返回。 –
@TonyHopkinson謝謝,我沒有意識到scope_identity只有最後一個插入。我以前只使用它插入以前 – Damo