数据表是空的

时间:2013-08-15 06:39:10

标签: c# .net

我有一个像这样的功能

con.Open();
int k = 1;
OleDbCommand cmd1 = new OleDbCommand("select MAX (CUT_ID) from CUTORDER_MASTER ", con);
OleDbDataReader rdr = cmd1.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(rdr);
if (dt != null)
{
    if (int.Parse(dt.Rows[0][0].ToString()) != 0)
    {
        k = int.Parse(dt.Rows[0][0].ToString()) + 1;
    }

}

我的问题是,如果查询没有检索到值,则数据表返回没有任何值的单元格max(cutid)。因此它会跳过空检查,如果O检查和代码到达k = int.Parse(dt.Rows[0][0].ToString()) + 1;
造成例外 格式不正确

有没有办法解决这个问题并检查数据表是否为空

5 个答案:

答案 0 :(得分:4)

尝试

'select NVL(MAX(CUT_ID), 0) from CUTORDER_MASTER'

如果表中没有数据,此查询将返回0。我不太擅长甲骨文,但经过快速研究后,我认为这将有效

答案 1 :(得分:3)

使用ExecuteReader()方法代替ExecuteScalar(),并将结果存储在变量中。然后使用此变量进行null检查。您正在检查数据表实例。实际上您不需要在此方案中使用数据表。

如果要检查数据表,请使用datatable.rows.count() method检查数据表中填充的行数。

答案 2 :(得分:2)

首先我的问题是:为什么要使用数据表来检索单个值。如果你不熟悉 ExecuteScalar 那么请阅读它,它将来也会帮助你。 好了,现在来看看你用过的场景:

有很多方法可以做到这一点:

如果您希望结果包含 0 而不是空值:

1)你可以从数据库中获取它,如下所示:

select IsNull(MAX(CUT_ID), 0) from CUTORDER_MASTER

2)使用代码:

if (dt != null)
{
    if (int.Parse(dt.Rows[0][0].ToString()) != null && 
        int.Parse(dt.Rows[0][0].ToString()) != "")
    {
        k = int.Parse(dt.Rows[0][0].ToString()) + 1;
    }
}

3)使用代码:

if (dt != null)
{
    if(dt.Rows.Count > 0)
    {
        if (int.Parse(dt.Rows[0][0].ToString()) != null && 
            int.Parse(dt.Rows[0][0].ToString()) != "")
        {
            k = int.Parse(dt.Rows[0][0].ToString()) + 1;
        }
    }
}

还有更多。

答案 3 :(得分:1)

select count(*) from CUTORDER_MASTER    

如果表中没有数据,这也将返回0;)

答案 4 :(得分:1)

尝试以下

OleDbCommand cmd1 = new OleDbCommand("select MAX (CUT_ID) from CUTORDER_MASTER ", con);
object result = = cmd1.ExecuteScalar();
int k = (result == null || result == DBNull.Value) ? 0: (int)result;

ExecuteScalar返回查询返回的结果集中第一行的第一列