如何在 SQL 服务器中使用 SqlReader 将对象类型转换为 Int



我有模型班课程:

public int CourseID { get; set; }
public string CourseName { get; set; }
public int CourseCredit { get; set; }

我有以下代码可以从数据库中检索有关课程的信息:

List<Course> CourseList = new List<Course>();
var con = new SqlConnection(@"Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=C:UsersADocumentsCourseDB.mdf;" +
@"Integrated Security=True;Connect Timeout=30");
con.Open();
var cmd2 = new SqlCommand("select Courses.CourseID, Courses.CourseName, Courses.CourseCredit from Courses inner join UsersCourses on " +
"[Courses].[CourseID] = [UsersCourses].[CourseID] where UsersCourses.UserID = @user", con);
cmd2.Parameters.Add(new SqlParameter("@user", SqlDbType.Int)).Value = UserID;
SqlDataReader reader = cmd2.ExecuteReader();
while (reader.Read())
{
{
CourseList.Add(new Course()
{
CourseID = Convert.ToInt32(reader["CourseID"]),
CourseName = (reader["CouorseName"].ToString()),
CourseCredit = Convert.ToInt32(reader["CourseCredit"])
});
}
}

问题是当我在这里运行代码时有格式异常抛出:

CourseList.Add(new Course()
{
CourseID = Convert.ToInt32(reader["CourseID"]),
CourseName = (reader["CouorseName"].ToString()),
CourseCredit = Convert.ToInt32(reader["CourseCredit"])
});

关于如何解决它的任何想法?

尝试使用这样的扩展方法:

public static int? GetInt32OrNull(this SqlDataReader reader, int index)
{
SqlInt32 value = reader.GetSqlInt32(index);
if (value.IsNull)
{
return null;
}
return value.Value;
}

好吧,当我使用 reader.get 方法时,这对我有用:

CourseList.Add(new Course()
{
CourseID = reader.GetInt32(0),
CourseName = reader.GetString(1),
CourseCredit = reader.GetInt32(2)
});

但我想它只有在您确切知道数据库表列的情况下才会起作用,希望这会有所帮助。