这是将数据从阅读器加载到对象中的更好方法

时间:2011-03-07 09:31:33

标签: architecture data-access-layer

查看以下代码以加载列表

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)

                }

虽然第二种方法可能因数据库中的值损坏而失败,但您不希望这样吗?在第一种方法中,由于缺少值而导致的错误变得困难吗?

只是想让其他人看到这两种方法的优点。

另外,请帮助正确标记问题。

3 个答案:

答案 0 :(得分:1)

你是对的,如果数据出现问题我也想尽快知道。

我个人使用第二种方法,虽然我用自己编写的小应用程序自动生成了我的BLL。

答案 1 :(得分:1)

如果你可以允许在坏数据上抛出异常,那么第二种方法是最好的。这在管理员可以控制数据质量的情况下很常见。

但是,管理员通常无法保证数据的质量。在这些情况下,通常要求应用程序正常处理格式错误的数据。当面对这种需求时,第一种方法是一种优雅的方法。

答案 2 :(得分:0)

第二个。我喜欢它更清洁,更容易维护。

您还可以将数据直接从数据读取器加载到变量中并在加载到类之前进行测试 - DateTimes是很好的示例,我建议在它们上使用TryParse():

DateTime contentLastModified;
if (!DateTime.TryParse(dr["LastModified"].ToString(), out contentLastModified))
{
  contentLastModified = MyApp.Common.Constants.SystemTypeValues.NullDate;
}