c#winforms:查询结果为空时不能递增

z9zf31ra  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(308)

这里有一个函数,它得到 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'类型的操作数'
有什么想法吗?
edit:我已经在mysql中确认了这个查询,它返回null。

yftpprvb

yftpprvb1#

您的初始检查是检查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;

相关问题