2016-06-13 6 views
-2

Я хотел получить значения из базы данных, используя SqlDataReader. Этот код прекрасно работает, когда я пишу только student_id и program_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

является 'session_id' типа' int'? –

+0

да это тип int .. –

ответ

1

I suspect session_id Значение, которое вы вводите из базы данных, это не a 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

ОК спасибо каждому 1 ... нашел свою ошибку .. возникла проблема в базе данных .. –

+0

Это замечательно :-) –

0

Propably вашего значение не является INT32 попытки преобразовать в INT16 или int64 с

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

вы можете конвертировать в указанном типе

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

Для лучшей помощи вы РЕКОМЕНДУЕМАЯ опубликовать вашу базу данных Очередь создания

 Смежные вопросы

  • Нет связанных вопросов^_^