MAX (id) с использованием SqlDataReader C # - PullRequest
3 голосов
/ 12 февраля 2012

Как мне изменить это:

        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) ?

Моя естественная тенденция - использовать MAX вокруг FormID, но я получаю исключение IndexOutOfRange.

Ответы [ 2 ]

15 голосов
/ 12 февраля 2012

Когда вы выбираете максимальный идентификатор, вы не должны использовать 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());
1 голос
/ 12 февраля 2012

Прошло много времени с тех пор, как я использовал этот стиль доступа к базе данных, но я думаю, что вам просто нужно

select max(FormID) from tbl_Form

вместе с вызовом ExecuteScalar

...