我有一种方法可以从学生的桌子上获得成绩。如果没有记录(空结果集),那么它应该返回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;
}
答案 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
属性)。