2012-08-08 5 views
1

ORM으로 LinqToSql을 사용하고 있습니다. 내가 GetInfoFromDataBase를 호출 클릭 버튼 핸들러에서지정한 캐스트가 foreach에서 유효하지 않습니다.

public partial class frmBarcodeList : Form 
{ 

    private ConnectionStringSettings connectionString = ConfigurationManager.ConnectionStrings["myconn"]; 
    private DatabaseContext _context; 

    public frmBarcodeList() 
     { 
      _context = new DatabaseContext(connectionString.ConnectionString); 
      InitializeComponent();    
     }  
} 

: 나는 다음 코드를 사용하여 양식을 가지고있다. 이 문제 방법 :

private List<TicketInfo> GetInfoFromDataBase() 
     { 
      try 
      { 
       var oids = GetSelectedEvents(); 

       List<Order> orders = new List<Order>(); 
       List<TicketInfo> data = new List<TicketInfo>(); 
       foreach (var oid in oids) 
       { 
        orders.AddRange(_context.Orders.Where(o => o.ScheduleId == oid && o.IsPayed.Value).ToList()); 
       } 

       foreach (var order in orders) 
       { 
        foreach (var detail in order.OrderDetails) ***line 158** 
        { 
         var checkSum = CalculateChecksum(detail.BarCode); 
         TicketInfo info = new TicketInfo(); 
         info.Firstname = order.SiteUser.FirstName; 
         info.LastName = order.SiteUser.LastName; 
         info.Email = order.SiteUser.Email; 
         info.Phone = order.SiteUser.PhoneNumber; 
         info.Barcode = string.Format("{0}{1}", detail.BarCode, checkSum); 
         info.FileName = RemoveInvalidFilePathCharacters(string.Format("{0}_{1}", order.EventSchedule.BaseEvent.Name, 
                         order.EventSchedule.RecurrenceStart), ""); 
         data.Add(info); 
        } 
       } 
       return data; 
      } 
      catch (Exception e) 
      { 
       MessageBox.Show(e.Message + "\n" + e.StackTrace); 
      } 

      return null; 
     } 

내가 얻을 오류 :

--------------------------- 

--------------------------- 
Specified cast is not valid. 
    at System.Data.SqlClient.SqlBuffer.get_Int32() 

    at System.Data.SqlClient.SqlDataReader.GetInt32(Int32 i) 

    at Read_OrderDetail(ObjectMaterializer`1) 

    at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() 

    at System.Data.Linq.EntitySet`1.Load() 

    at System.Data.Linq.EntitySet`1.GetEnumerator() 

    at DT.KazBilet2.BarcodeChecker.frmBarcodeList.GetInfoFromDataBase() in C:\Users\Макс\Documents\Visual Studio 2010\Projects\DT.KazBilet2\branches\NewDesk\DT.KazBilet2.BarcodeChecker\frmBarcodeList.cs:line 158 
--------------------------- 
ОК 
--------------------------- 

가 왜이 오류가?
감사합니다.

+2

모델 오류 (예 : 모델의 유형과 일치하지 않는 데이터베이스의 열 유형)처럼 보입니다. 하드 비록 더 구체적인. –

+0

'OrderDetail' 정의와 해당 DBML 파일 조각을 게시 할 수 있습니까? – Dennis

+0

@ JoachimIsaksson : 네, 맞습니다. 감사 – user1260827

답변

1

Linq2SQL을 사용할 때 SqlClient 메서드 내의 형식 캐스트 오류는 (거의 항상) 모델 오류로 인한 것입니다.

모델이 데이터베이스와 일관성이 있는지, 특히 모델의 int 필드 (get_Int32가 오류를 제공함)가 데이터베이스의 실제 정수 필드에 해당하는지 확인하고 싶습니다.

관련 문제