C # WinForms: невозможно увеличить, когда результат запроса равен нулю

0

У меня есть функция здесь, которая получает последнее значение order_id и увеличивает его на 1, если это еще не 1. Проблема в том, что начальное значение равно null, и я не смог его добавить на 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, он возвращает null.

  • 0
    Именно сообщение об ошибке. Когда это DBNull, вы не можете рассматривать его как int. Назначьте значение, когда это DBNull.
  • 0
    Я не могу превентивно присвоить 1 в качестве значения, единственное, о чем я мог подумать, это присвоить 0 в качестве первого начального значения ... Я не уверен, правильно ли это?
Показать ещё 4 комментария
Теги:
winforms

1 ответ

2
Лучший ответ

Первоначальная проверка проверяет значение null вместо 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;
  • 0
    Я попробую это позже, когда смогу редактировать свой код, заранее спасибо, я сообщу, работает ли он.
  • 0
    Могу ли я спросить, должно ли это быть поле <int> (0) в скобках? или <int> [0]?
Показать ещё 2 комментария

Ещё вопросы

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