我有一个Class(我们称之为实体)的名称映射到数据库Table(Person table)的Person。该表的记录可以在所有字段中包含空值,但是一个是PK。处理有错误的对象,并且不能与null或DBnull.value比较
这是短暂的,我们如何定义我们的Person实体:
...
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); }
}
}
...
的问题是,当我得到的人选名单
var dsPersons = DataHelper.personTabelAdapter.GetFilteredPersons(nationalNo, name);
这是空的分贝这些领域,是具有例外,所以我无法将它们与null或甚至是DBNull.Value进行比较,请在调试中查看我的代码的以下图像:
我想检查它们为空,以便我可以决定填写我的新对象字段或不填写它们。
这里的异常的细节我得到
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 ---
这是我的Web方法
[WebMethod]
public List<Person> GetFilteredPersons(string nationalNo, string name)
{
return Person.GetFilteredPersons(nationalNo, name);
}
调用此方法
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;
}
我真的卡在这一块。您的答复将受到欢迎。
为什么你会捕捉异常,只是重新抛出它包裹在一个平淡的'System.Exception'?这是添加代码,真的只是遮蔽事情。除此之外,你需要告诉我们你得到了什么样的异常。您已经显示了一个显示StrongTypingException的屏幕截图,但您应该查看一个特定异常的*详细信息*。 – 2013-02-12 06:51:45
你好乔恩。我会在一分钟内添加例外的细节。 – 2013-02-12 07:10:46
@JonSkeet详细信息已添加。 – 2013-02-12 07:14:34