You don't use a DataReader with an SQL UPDATE command - only with queries that contain a SELECT statement.
Instead, use ExecuteNonQuery:
Dim query1 As String = " Update verfication SET device = device - 1 WHERE serial=@serial"
cmd = New SqlCommand(query1, con)
cmd.Parameters.AddWithValue("@serial", serialtxtbox.Text)
dim affected as Integer = cmd.ExecuteNonQuery()
The value in
affected
will tell you how many rows were updated. If it's zero, then the serial number wasn't found.
I'd recommend using that instead of blindly issuing the same message to the user.
Do note that MsgBox is very outdated - it's a "Hangover" from VB6, which died in 2001! You should be using the
MessageBox Class (System.Windows.Forms) | Microsoft Docs[
^] instead these days.