簡體   English   中英

如何在SQL Server中使用SqlReader將對象類型轉換為Int

[英]How to convert object type to Int with SqlReader in SQL server

我有模型課課程:

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:\Users\A\Documents\CourseDB.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"])
                    });
                }
            }

問題是當我在這里運行代碼時,有FormatException拋出:

 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)
                });

但是我想這只有在您確切知道數據庫表列是什么的情況下才能起作用,希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM