Как перейти к следующей строке в datatable, если одна строка ловит ошибку? C # 2.0

0

Я получаю данные из базы данных mySql, и я вставляю ее в другую систему. Если столбец имеет данные в некорректном формате, я записываю это и перехожу в следующую строку в datatable. Он работает так, как ожидалось, но теперь, если у меня есть функция поиска в моем методе, которая получает некоторые дополнительные данные, и эта функция не работает, я хочу немедленно зарегистрировать это и перейти к следующей строке. Как сейчас, я просто регистрирую его, но он все равно вставлен (без значения, которое не соответствует критериям поиска).

Мой код:

    private void updateCustomer()
            {
                 MySqlConnection connection = new MySqlConnection("server=myServer;database=myDatabase;uid=myID;password=myPass");

                MySqlCommand command = new MySqlCommand(@"mySelectCommand", connection);
                DataTable customerTbl = new DataTable();
                MySqlDataReader reader;
                try
                {
                    connection.Open();
                    reader = command.ExecuteReader();

                    if (reader.HasRows)
                    {
                        customerTbl.Load(reader);
                    }
                    reader.Close();

                }
                catch (Exception ex)
                {
            _out.error("Could not connect to mySql database");
                }
                finally
                {
                    connection.Close();
                }

                foreach (DataRow row in customerTbl.Rows)
                {
                    // Declare the customer variables
                    string customerID = Encoding.ASCII.GetString((byte[])row["Customer ID"]);
                    string ChildOf = row["Child of"].ToString();

                    // Create the customer object
                    Customer customer = new Customer();

            customer.entityId = customerID;


                    if (ChildOf != "")
                    {
            RecordRef parentRef = new RecordRef();
                        try
                        {

                            parentRef.internalId = searchCustomer(ChildOf);

                        }
                        catch
                        {
// If it fails here I want to log the customerID and then go to the next row in the datatable (could not find the internalid for ChildOf
                            _out.error(customerID + " was not updated. Error: invalid format Parent string");
                        }
                finally
                {
                parentRef.typeSpecified = false;
                            customer.parent = parentRef;
                }
                    }



                    // Invoke update() operation
                    WriteResponse response = _service.update(customer);

                    // Process the response
                    if (response.status.isSuccess)
                    {

                    }
                    else
                    {
                        _out.error(customerID + " was not updated. Error: " + getStatusDetails(response.status));
                    }
                }
            }
Теги:
database

3 ответа

0

Используйте свойство row.HasError.

0

Я понял, что хочу также регистрировать и другие неудачные поля. Возможно, это неэффективный способ, но я сделал что-то вроде:

        bool findParent = true;
        if (ChildOf != "")
        {
            try
            {
                RecordRef parentRef = new RecordRef();
                parentRef.internalId = searchCustomer(ChildOf);
                parentRef.typeSpecified = false;
                customer.parent = parentRef;
            }
            catch
            {
                findParent = false;
                _out.error(customerID + " was not inserted. Error: invalid format Parent string");
            }
        }

И затем оператор if перед попыткой вставить:

if (findPartner == true && findParent == true)
                {
                    response = _service.add(customer);
                    // Process the response
                    if (response.status.isSuccess)
                    {

                    }
                    else
                    {
                        _out.error(customerID + " was not inserted. Error: " + getStatusDetails(response.status));
                    }

                }
                else
                {
                    //_out.error(customerID + " was not updated. Error: " + getStatusDetails(response.status));
                }
0

Вам нужно удалить строку в блоке catch и изменить цикл foreach на обратный цикл for для обработки абзацев.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню