MAX (id) utilizzando SqlDataReader C #

Come posso cambiare questo:

using (SqlCommand myCommand = myConnection.CreateCommand()) { myConnection.Open(); myCommand.CommandText = "SELECT FormID FROM tbl_Form"; using (SqlDataReader reader = myCommand.ExecuteReader()) { while (reader.Read()) { int FormID = reader.GetInt32(reader.GetOrdinal("FormID")); MessageBox.Show(FormID.ToString()); } } } 

ottenere MAX (FormID) ?

La mia tendenza naturale è quella di lanciare un MAX attorno a FormID ma sto ricevendo un’eccezione IndexOutOfRange.

Quando si seleziona l’ID massimo non si dovrebbe utilizzare un SqlDataReader – la query restituisce solo un elemento, che per impostazione predefinita è senza nome, quindi la query esistente si interrompe perché si aspetta un risultato denominato “FormID” – anche se si potrebbe avere “risolto” la query usando "SELECT MAX(FormID) as FormId FROM tbl_Form" . Utilizzare invece ExecuteScalar() :

 myCommand.CommandText = "SELECT MAX(FormID) FROM tbl_Form"; int maxId = Convert.ToInt32(myCommand.ExecuteScalar()); 

È passato un po ‘di tempo da quando ho usato questo tipo di accesso al database, ma penso che sia necessario

 select max(FormID) from tbl_Form 

insieme a una chiamata a ExecuteScalar