2016-06-13 22 views
-2

我想使用SqlDataReader從數據庫提取值。此代碼運行正常,當我只在while循環寫student_idprogram_id,但將在session_id的錯誤:如何使用SqlDataReader提取值?

指定的轉換是無效

代碼:

string student_name = items.Cells["student_name"].Value.ToString(); 

string query_select_student = "SELECT student_id, program_id, session_id, department_id FROM student WHERE student_name = '" + student_name + "' "; 

SqlDataReader dr = DataAccess.selectDataReader(query_select_student); 

while (dr.Read()) 
{ 
     student_id = (int)dr.GetValue(0); 
     program_id = (int)dr.GetValue(1); 
     session_id = (int)dr.GetValue(2); 
     department_id = (int)dr.GetValue(3); 
} 
dr.Close(); 
+0

什麼是我的錯誤? –

+1

是'int'類型的'session_id'? –

+0

是的它是int類型的。 –

回答

1

我懷疑session_id您從數據庫中獲得的值是而不是int或值可能是null

試試這個。

while (dr.Read()) 
{ 
     student_id = (int)dr.GetValue(0); 
     program_id = (int)dr.GetValue(1); 
     session_id = dr.IsDBNull(2)? default(int) : (int)dr.GetValue(2);   
     department_id = (int)dr.GetValue(3); 
} 

我強烈建議使用調試器,放置一個斷點,看看究竟收到了什麼。

+0

我已經使用調試器,它給我的類型操作系統session_id是Int32。雖然在數據庫中我只使用int。 –

+0

好的謝謝你每1 ...發現我的錯誤..有一個數據庫中的問題.. –

+0

這很好:-) –

0

Propably你的價值不是一個INT32嘗試轉換到INT16int64

Convert(INT16,dr.GetValue(2));

你可以轉換到指定的類型

Convert(INT64,dr.GetValue(2));

爲了更好地幫助你應該發佈您的數據庫創建隊列