MAX(id)使用SqlDataReader C#

我该如何改变:

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()); } } } 

得到MAX(FormID)

我的自然倾向是在FormID周围抛出一个MAX,但我得到一个IndexOutOfRangeexception。

当您选择最大ID时,您不应该使用SqlDataReader – 该查询只返回一个项目,默认情况下是未命名的,因此您的现有查询会中断,因为它需要一个名为“FormID”的结果 – 尽管您可以“修复”您的查询通过使用"SELECT MAX(FormID) as FormId FROM tbl_Form" 。 而是使用ExecuteScalar()

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

我使用这种数据库访问方式已经有一段时间了,但我认为你只需要

 select max(FormID) from tbl_Form 

以及对ExecuteScalar的调用