2017-08-10 41 views
0

我的模型類課程:如何轉換對象類型的SQL服務器SQLReader的對INT

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

和我有下面的代碼從數據庫中有關課程retrive信息:

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

有關如何解決這個問題 ?

+1

你有沒有調試過來看看它不喜歡的3個字段中的哪一個值? – Jamiec

+2

有一個錯字。你寫了「CouorseName」而不是「CourseName」 – MatSnow

+0

你應該看看[FormatException]是什麼(https://msdn.microsoft.com/en-us/library/system.formatexception(v = vs.110).aspx)是。它可以被稱爲「在調用一個將字符串轉換爲其他數據類型的方法時,該字符串不符合所需的模式」。在轉換爲int之前,您是否調試瞭解讀者的價值? – maccettura

回答

0

嗯,這個工作對我來說,當我使用reader.get方法是這樣的:

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

,但我想,如果你知道它只會工作正是你的數據庫表列,希望這會有所幫助。

0

嘗試使用這種擴展方法:

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

    return value.Value; 
}