2016-06-13 5 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

私はデバッガを使用して、それは私にタイプosを与えますsession_idはInt32です。データベースではintを使用しています。 –

+0

okありがとうございます毎回1 ...私の間違いを発見しました..データベースに問題がありました。 –

+0

それは素晴らしいです:-) –

0

Propablyあなたの値は

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

INT16またはint64に変換するINT32しようとしないで、あなたが指定したタイプのあなたがすべきよりよいヘルプについて

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

に変換することができますあなたのデータベースを投稿してください。作成キュー

関連する問題