如果前一个记录为= null,则转到下一个记录

时间:2016-01-13 14:38:25

标签: c# sql-server geocoding

我正在搜索我的数据库检查地址并使用Geocode找到lat / lng。 一旦我点击一个空值的记录,它就会移动到catch。知道如何让它移动到下一个记录吗?

table

2 个答案:

答案 0 :(得分:5)

在循环中捕获异常:

while (reader.Read())
{
    try
    {
        // do something
    }
    catch (Exception ex)
    {
        // examine the exception to see what went wrong
        // if you can't continue, then "throw;"
        // else...
        continue;
    }
}

编辑:请注意,上述内容将是从异常中恢复以继续循环的方式。 然而,也许我最初误解了这个问题。如果可以轻松且有意义地避免例外首先(即,如果它不是真正的例外条件),那么这将是首选。考虑一下不应该使用异常来控制逻辑流的格言。

从逻辑上讲,如果您在执行导致异常的操作之前能够检查此情况,那么代码的整体结构将更像是这样:

while (reader.Read())
{
    // do something
    if (someCondition)
    {
        // do the rest of the something
    }
    else
        continue;
}

(或者您可以将条件反转以检查"继续"案例首先,这也很有效。它取决于您在代码中看起来更干净的东西。)

在您的特定情况下,它完全取决于 导致其失败的内容。例如,如果您的某个变量是null,那么您可以检查:

var result = xdoc.Element("GeocodeResponse").Element("result");
if (result == null)
    continue;

基本上,您需要确定代码中可能失败的内容,并引入一些逻辑条件以从该故障中恢复。理想情况下,任何此类"继续"在发生任何永久性副作用之前,将完成循环。在你的代码中,看起来唯一的永久副作用是写入控制台,所以我建议将所有这些放在循环体的最后。然后在检查条件时,只要在逻辑中遇到可继续故障状态,就可以continue;。如果一切都过去了,代码就会到达写入控制台的行,然后自然地继续。

答案 1 :(得分:1)

您可以检查列的空值并继续。这通常被认为比捕获异常更清晰,特别是如果你期望在这里和那里有一些空值。

类似的东西:

rails g erb:scaffold