C# SQL查询有时不返回值
我的Oracle数据库中有一个表,该表有一个ID和一个表示一年中各个时期的日期 现在,我有一个选择表的最后一个周期的C代码:C# SQL查询有时不返回值,c#,sql,oracle,null,datarow,C#,Sql,Oracle,Null,Datarow,我的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
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;
}
问题在于,有时它会随机为DataRow返回一个“null”值。
知道为什么会发生这种情况吗?您正在从表中随机选择一条记录
其中ROWNUM=1
是唯一的标准,它告诉dbms只需选择任何记录并停止。然后,您可以按时段\ id对这一条记录进行排序,这没有任何效果,因为您当然不能更改一行的排序顺序
如果有时查询返回一个空记录,这意味着表中有一个空记录,dbms恰好选择了这个记录。就这些
如果希望先进行排序,然后选择数字最大的行,则应将查询更改为:
SELECT * FROM (SELECT * FROM PERIODS ORDER BY PERIOD_ID DESC) WHERE ROWNUM = 1
编辑:由于是您的C代码生成空值,我上面的回答不正确,但可能与此相关。什么是周期?它是一个具有获取数据行的构造函数的类。据我所知,构造函数可以失败,但随后会出现异常,也可以生成实例,但该实例永远不会为null。所以:不,我不知道这里发生了什么。也许上面的解释可以帮助您了解构造函数对它得到的数据行做了什么。什么是
Get\u DataRow\u InLineSQL
?我猜您得到的是返回的0行。ROWNUM=1时是否“总是”有返回的内容?还是该表被清除?有很多因素可能导致这种情况。需要更多信息。