看看下面的代码来加载一个列表
while (dataReader.Read())
{
City city;
if (City.TryLoad(dataReader, out city))
{
defaultCities.Add(city);
}
}
TryLoad读取读取器并加载数据对象,成功时返回true,失败时返回false。我被告知,这样做的好处是,如果加载对象时由于某种原因导致代码失败,代码将不会抛出错误。因此,如果一行数据损坏,则不会将其添加到默认连接中。此外,在try load中,我们可以记录特定的行抛出和错误,并修复它。
另一方面,我之前遵循的方法只是加载对象并将它们添加到集合中。
while (dataReader.Read())
{
City city = new City();
city.Name = reader["Name"].ToString();
.
.
defaultCities.Add(city)
}
虽然第二种方法可能会因为数据库中的值损坏而失败,但您不希望发生这种情况吗?在第一种方法中,由于缺失值而捕获bug不会变得困难吗?
我只是想听听别人对这两种方法的利弊的看法。
此外,请帮助适当地标记问题。
发布于 2011-03-07 20:48:47
如果您可以允许在错误数据上抛出异常,那么第二种方法是最好的。这在管理员可以控制数据质量的情况下很常见。
然而,管理员通常不能保证数据的质量,这是事实。在这些情况下,通常要求应用程序优雅地处理格式错误的数据。当面对这种需求时,第一种方法是一种优雅的方法。
发布于 2011-03-07 09:35:33
你说得很对,如果数据有问题,我也想尽快知道。
我个人使用第二种方法,尽管我写了一个小应用程序来自动生成我的BLL。
发布于 2011-03-07 14:23:18
第二个。我喜欢它,因为它更干净,更容易维护。
您还可以将数据直接从数据读取器加载到变量中,并在加载到类中之前进行测试- DateTimes就是很好的例子,我建议对它们使用TryParse():
DateTime contentLastModified;
if (!DateTime.TryParse(dr["LastModified"].ToString(), out contentLastModified))
{
contentLastModified = MyApp.Common.Constants.SystemTypeValues.NullDate;
}
https://stackoverflow.com/questions/5217943
复制相似问题