C # WinForms: невозможно увеличить, когда результат запроса равен нулю - PullRequest
0 голосов
/ 25 июня 2018

У меня есть функция, которая получает последнее значение order_id и увеличивает его на 1, если его еще нет 1. Проблема в том, что начальное значение равно нулю, и я не могу его добавить, добавив на 1.

Код:

private void getOrderId()
    {
        var orders_dt = conn.Select("orders", "MAX(order_id)").GetQueryData();

        if (orders_dt == null || orders_dt.Rows.Count == 0 || orders_dt.Rows[0][0] == null)
        {
            //Should not preemptively insert into the database
            order_no.Text = "1";
        }
        else
        {
            int order_id = orders_dt.Rows[0][0] + 1; //ERROR HERE
            order_no.Text = order_id.ToString();
        }
    }

Ошибка возникает на int order_id = orders_dt.Rows[0][0] + 1; Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: «Оператор» + нельзя применять к операндам типа «System.DBNull» и «int» '

Есть идеи?

Редактировать: я уже подтвердил запрос в MySql, он возвращает ноль.

1 Ответ

0 голосов
/ 25 июня 2018

Ваша первоначальная проверка проверяет наличие нуля вместо DBNull.Value.

private void getOrderId()
{
    var orders_dt = conn.Select("orders", "MAX(order_id)").GetQueryData();

    if (orders_dt == null || orders_dt.Rows.Count == 0 || orders_dt.Rows[0][0] == DBNull.Value)
    {
        //Should not preemptively insert into the database
        order_no.Text = "1";
    }
    else
    {
        int order_id = orders_dt.Rows[0].Field<int>(0) + 1;
        order_no.Text = order_id.ToString();
    }
}

Примечание:

//I'm using `Field<T>` to ensure correct datatype.  Change `Field<int>` to reflect whatever type it really is.
int order_id = orders_dt.Rows[0].Field<int>(0) + 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...