2012-05-15 3 views
1

Приведенное выше сообщение об ошибке появляется, когда я пытаюсь получить значение столбца из Datatable.Указанное приведение недействительно при получении значения Datatable Column

Это то, что я нахожу в StackTrace:

System.Linq.Enumerable.WhereSelectEnumerableIterator источник)

and this in the TargetSite when debugging: 

{Boolean b__0 (System.Data. DataRow)}

вот мой код: DataTable hr = new DataTable();

  hr.Columns.Add("BookingDate"); 
      hr.Columns.Add("BookingId"); 
      hr.Columns.Add("BookingSource"); 
      hr.Columns.Add("CheckInDate"); 
      hr.Columns.Add("CheckOutDate"); 


      for (int i = 0; i < gmisc.GetModifiedBookings(gmoreq).Bookings.Length; i++) 
      { 
       hr.Rows.Add(); 
       hr.Rows[i]["BookingDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingDate.ToString()); 
       hr.Rows[i]["BookingId"] = Convert.ToInt64(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingId.ToString()); 
       hr.Rows[i]["BookingSource"] = gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingSource.ToString(); 
       hr.Rows[i]["CheckInDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].CheckInDate.ToString()); 
       hr.Rows[i]["CheckOutDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].CheckOutDate.ToString()); 



      } 
      Int64 BookingId = (from DataRow dr in hr.Rows 
          where (Int64)dr["BookingId"] == BookId 
          select (Int64)dr["BookingId"]).FirstOrDefault(); 
       TextBox1.Text = Convert.ToString(BookingId); 

Где я ошибся, если кто-нибудь может рассказать мне.

ответ

1

Проверьте код, первые две строки :

hr.Rows[i]["BookingDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingDate.ToString()); 
hr.Rows[i]["BookingId"] = Convert.ToInt64(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingId.ToString()); 

, если gmisc.GetModifiedBookings (gmoreq) .Книги [i]. вы пытаетесь преобразовать его в строку, а затем DATETIME

если нуль, то .ToString даст ошибку «Указано стоимость .......»

и то же самое произойдет в момент преобразования в Дата и время.

0

При создании столбца данных с использованием перегрузки Add(string) тип столбца равен string (см. http://msdn.microsoft.com/en-us/library/52xzw8tf.aspx). Вы не можете наложить строку непосредственно на Int64 или DateTime.

Используйте перегрузку Add(string, Type) или перегрузку Add(string, Type, string), чтобы указать тип данных столбца.

1

Если д-р [ "BookingId"] никогда не бывает пусто (в противном случае добавить нулевой чек)

Использование

    Int64 BookingId = (from DataRow dr in hr.Rows 
         where Int64.Parse(dr["BookingId"].ToString()) ==BookId 
         select Int64.Parse(dr["BookingId"].ToString())).FirstOrDefault(); 

Вместо

    Int64 BookingId = (from DataRow dr in hr.Rows 
         where (Int64)dr["BookingId"] == BookId 
         select (Int64)dr["BookingId"]).FirstOrDefault(); 
Смежные вопросы