我的Oracle数据库中有一个表,其中包含一个ID和一个代表一年中某些时段的日期。
现在,我有一个C#代码,用于选择表格的最后一段时间:
public static Period Get_Last_Period()
{
DataRow dr = Get_DataRow_InLineSQL("SELECT * FROM PERIODS WHERE ROWNUM = 1 ORDER BY PERIOD_ID DESC");
Period iPeriod = new Period(dr);
return iPeriod;
}
问题是有时它会随机返回一个" null" DataRow的值。 知道为什么会这样吗?
答案 0 :(得分:1)
您正在从表格中选择随机记录。 WHERE ROWNUM = 1
作为唯一标准告诉dbms只选择任何记录并停在那里。然后你通过period_id订购这一条记录没有任何效果,因为当然不能改变一行的排序顺序。
如果有时查询返回空记录,则表示表中存在空记录,而dbms恰好选择此记录。这就是全部。
如果您希望首先进行排序,然后选择编号最大的行,则应将查询更改为:
SELECT * FROM (SELECT * FROM PERIODS ORDER BY PERIOD_ID DESC) WHERE ROWNUM = 1
编辑:由于您的C#代码产生空值,我上面的答案不正确,但它可能是相关的。什么是期间?它是一些具有获取DataRow的构造函数的类。据我所知,构造函数可能会失败,但是然后你会得到一个异常,或者它产生一个实例,但它永远不会为null。所以:不,我不知道这里发生了什么。也许上面的解释ragrding查询可以帮助你找出你的构造函数对它获得的DataRow做了什么。