0

我有一种方法可以从学生的表格中获得成绩。如果没有记录(空结果集),那么它应该返回 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

4 回答 4

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;
} 
于 2011-02-08T23:56:03.177 回答
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
}
于 2011-02-09T00:09:20.620 回答
0

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

当然,这都是约定俗成的,但您只希望从诸如 之类的方法返回布尔值TryParse()

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

于 2011-02-09T00:00:58.073 回答
0

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

于 2011-02-08T23:57:00.897 回答