2013-02-12 5 views
0

데이터베이스 테이블 (Person 테이블)에 매핑 된 클래스 (Entity 우리가 호출 한) 명명 된 사람이 있습니다. 이 테이블의 레코드에는 PK를 제외한 모든 필드에 Null 값이 포함될 수 있습니다.null 또는 DBnull.value와 비교할 수없는 오류가있는 객체를 처리하십시오.

이것은 우리가 우리의 사람 엔티티를 정의하는 방법에 대한 간략한에 있습니다

... 
private System.DateTime _BirthDate; 

[DisplayName("Birth Date")] 
[Category("Column")] 
public System.DateTime BirthDate 
{ 
    get 
    { 
     try { return _BirthDate; } 
     catch (System.Exception err) 
     { throw new Exception("Error getting BirthDate", err); } 
    } 
    set 
    { 
     try { _BirthDate = value; } 
     catch (System.Exception err) 
     { throw new Exception("Error setting BirthDate", err); } 
    } 
} 
... 

내가 사람의 목록을 얻을 때 DB에 null이 있었다

var dsPersons = DataHelper.personTabelAdapter.GetFilteredPersons(nationalNo, name); 

그 필드 것을 갖는 문제는 예외 그래서 나는 null 또는 심지어 DBNull.Value, 디버그에서 내 코드의 다음 이미지를 봐 수 없다

null이되어 있는지 확인하여 새 객체 필드를 채우거나 채울 것을 결정할 수 있습니다.

여기에 예외의 세부 사항은 내가

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.Data.StrongTypingException: The value for column 'BirthDateFa' in table 'Person' is DBNull. ---> System.InvalidCastException: Unable to cast object of type 'System.DBNull' to type 'System.String'. 

    at EcomService.Data.EcomDS.PersonRow.get_BirthDateFa() in c:\Projects\Project\EcomForms\EcomService\EcomService\Data\EcomDS.Designer.cs:line 30607 

    --- End of inner exception stack trace --- 

    at EcomService.Data.EcomDS.PersonRow.get_BirthDateFa() in c:\Projects\Project\EcomForms\EcomService\EcomService\Data\EcomDS.Designer.cs:line 30610 

    at EcomService.Classes.Entities.Person.GetFilteredPersons(String nationalNo, String name) in c:\Projects\Project\EcomForms\EcomService\EcomService\Classes\Entities\Person.cs:line 898 

    at EcomService.EService.GetFilteredPersons(String nationalNo, String name) in c:\Projects\Project\EcomForms\EcomService\EcomService\EService.asmx.cs:line 172 

    --- End of inner exception stack trace --- 

를 얻을 수있어 문제는이 방법

static public List<Person> GetFilteredPersons(string nationalNo, string name) 
{ 
    List<Person> persons = new List<Person>(); 
    var dsPersons = DataHelper.personTabelAdapter.GetFilteredPersons(nationalNo, name); 
    foreach (var dsPerson in dsPersons) 
    { 
     Person person = new Person(); 
     person.BirthDateFa = dsPerson.BirthDateFa; 
     //I don't know how to deal with the exceptions here 
     .... //other fields 
     persons.Add(person); 
    } 
    return persons; 
} 

난 정말이 작품에 붙어에게 호출 내 웹 방법

[WebMethod] 
public List<Person> GetFilteredPersons(string nationalNo, string name) 
{ 
    return Person.GetFilteredPersons(nationalNo, name); 
} 

입니다. 귀하의 답변은 친절하게 환영받을 것입니다.

+0

는, 단지 그것을 개성'System.Exception'에 싸여 다시 발생하는? 그것은 단지 물건을 가리는 코드를 추가하는 것입니다. 그 외에, 당신이 우리에게 예외가 무엇인지 말해줘야합니다. StrongTypingException을 보여주는 스크린 샷을 보여 줬지만 특정 예외 하나의 세부 정보 *를 살펴 봐야합니다. –

+0

Hello Jon. 나는 예외의 세부 사항을 1 분 안에 추가 할 것이다. –

+0

@JonSkeet 세부 정보가 추가되었습니다. –

답변

2

강력한 형식의 데이터 집합을 사용하고 있으므로 예외가 발생합니다. StrongTypingException 설명서에 다음과 같이 표시됩니다.

사용자가 DBNull 값에 액세스 할 때 강력한 형식의 DataSet에 의해 throw되는 예외입니다.

이 기사를 읽어 보시기 바랍니다, http://msdn.microsoft.com/en-us/magazine/cc163877.aspx

예 : 예외를 잡을 것입니다 왜

object.Is<ColumnName>Null() //which returns true or false 
+1

고맙습니다. –

0

부울을 반환하는 Is (columnname) Null() 함수를 호출하여 형식화 된 데이터 집합의 개체가 null인지 확인할 수 있습니다. 이러한 강력한 입력 예외는 열이 null로 인해 발생합니다. 예 : dsPerson.IsBirthDateNull().