如果找到记录则返回int,如果未找到数据则返回false

时间:2011-02-08 23:54:18

标签: c# return-type

我有一种方法可以从学生的桌子上获得成绩。如果没有记录(空结果集),那么它应该返回false。

我是否编写了一个返回布尔值(找到,未找到)和整数作为参考参数的函数?

这是我到目前为止(如果找不到记录,我从proc返回-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 个答案:

答案 0 :(得分:8)

我会返回int吗?其中null意味着找不到。

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 :(得分:1)

使用您的代码作为示例,我会做类似的事情:

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
}

答案 2 :(得分:0)

您可以让方法返回object,然后测试以查看类型是什么,但这通常不是一个好主意。可能更好的是返回一个可以为空的int?,然后检查HasValue属性。如果找不到任何内容,则使方法返回null,如果找到则返回整数。

答案 3 :(得分:0)

我认为“GetParticipationGrade”的语法意味着它的返回值应该是等级本身。返回无效值似乎是有意义的,例如-1或NULL(根据其他答案,这也是我的选择*),然后检查以确保等级有效。

当然,这是所有惯例,但你只能期望从TryParse()这样的方法返回布尔值。

* 要解释一下,我更喜欢int?到-1的哨兵等级,因为可以为您想要进行的检查构建可为空的值类型(HasValue属性)。