1

上記のエラーメッセージは、Datatableから列の値を取得しようとすると表示されます。

これは私がスタックトレースで見つけたものです:

System.Linq.Enumerable.WhereSelectEnumerableIterator 1ソース)2.MoveNext()
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable

 and this in the TargetSite when debugging:

{ブール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);

誰かが教えてくれたら、どこが間違っていたのですか。

4

3 に答える 3

1

コードの最初の 2 行を確認してください。

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).Bookings[i].BookingDate が null の場合 ??? それを文字列に変換してからdatetimeに変換しようとしています

null の場合、.ToString は「指定されたコスト.......」というエラーを返します。

日時への変換時にも同じことが起こります。

于 2012-05-15T04:13:39.490 に答える
1

dr["BookingId"] が null でない場合 (そうでない場合は null チェックを追加)

使用する

                  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();
于 2012-05-15T04:10:27.307 に答える
0

オーバーロードを使用してデータ列を作成する場合Add(string)、列のタイプは次のとおりですstringhttp://msdn.microsoft.com/en-us/library/52xzw8tf.aspxを参照)。Int64またはに文字列を直接キャストすることはできませんDateTime

Add(string, Type)オーバーロードまたはオーバーロードを使用してAdd(string, Type, string)、列のデータのタイプを指定します。

于 2012-05-15T04:06:22.093 に答える