Возвращает int, если запись найдена, или false, если данные не найдены. - PullRequest
0 голосов
/ 09 февраля 2011

У меня есть метод, который оценивает ученика по таблице.Если нет записей (набор результатов null), он должен вернуть false.

Написать ли функцию, которая возвращает логическое значение (найдено, не найдено) и целое число в качестве параметра ссылки?

Это то, что у меня есть (я возвращаю -1 из процесса, если запись не найдена)

public static int getParticipationGrade(SqlConnection sqlConn, int enrollmentID)
{
    SqlCommand sqlCmd = new SqlCommand("dbo.usp_participation_byEnrollmentID_Select", sqlConn);
    sqlCmd.CommandType = CommandType.StoredProcedure;
    sqlCmd.Parameters.AddWithValue("@enrollmentID", enrollmentID);

    int ret = 0;
    sqlConn.Open();
    ret = (int)sqlCmd.ExecuteScalar();
    sqlConn.Close();
    return ret;
}

Ответы [ 4 ]

8 голосов
/ 09 февраля 2011

я бы вернул int?где нулевое значение не найдено.

public static int? getParticipationGrade(SqlConnection sqlConn, int enrollmentID)
{
    SqlCommand sqlCmd = new SqlCommand("dbo.usp_participation_byEnrollmentID_Select", sqlConn); 
    sqlCmd.CommandType = CommandType.StoredProcedure; sqlCmd.Parameters.AddWithValue("@enrollmentID", enrollmentID); 
    int ret = 0; 
    sqlConn.Open(); 
    ret = (int)sqlCmd.ExecuteScalar(); 
    sqlConn.Close(); 
    return ret < 0 ? (int?) null : ret;
} 
1 голос
/ 09 февраля 2011

Используя ваш код в качестве примера, я бы сделал что-то вроде:

public bool TryGetParticipationGrade(SqlConnection sqlConn, out int enrollmentID)
{
    SqlCommand sqlCmd = new SqlCommand("dbo.usp_participation_byEnrollmentID_Select", sqlConn);
    sqlCmd.CommandType = CommandType.StoredProcedure;
    sqlCmd.Parameters.AddWithValue("@enrollmentID", enrollmentID);

    sqlConn.Open();
    enrollmentId = (int)sqlCmd.ExecuteScalar();
    sqlConn.Close();
    return enrollmentId != -1;        
}

Использование:

int enrollmentId;
if (TryGetParticipationGrade(sqlConn, out enrollmentId))
{
    // perform success tasks
}
else
{
    // perform fail tasks
}
0 голосов
/ 09 февраля 2011

Я думаю, что синтаксис «GetParticipationGrade» подразумевает, что его возвращаемое значение должно быть самой оценкой.Кажется, имеет смысл вернуть недопустимое значение, такое как -1 или NULL (согласно другим ответам, и это также будет моим выбором *), а затем проверить, чтобы оценка была действительной.

Конечно, это все соглашение, но вы ожидаете только логического возврата от метода, такого как, например, TryParse().

* Для объяснения я бы предпочел int? до уровня дозорного, например, -1, потому что создаются типы значений, допускающие значение NULL (свойство HasValue) для той проверки, которую вы хотите выполнить.

0 голосов
/ 09 февраля 2011

Вы могли бы заставить метод вернуть object, а затем проверить, что это за тип, но обычно это не очень хорошая идея. Вероятно, было бы лучше вернуть null-значение int int?, а затем проверить свойство HasValue. Пусть метод вернет null, если ничего не найдено, и вернет целое число, если оно найдено.

...