[阅读: 441] 2006-06-06 23:13:12
以前这么写的:
sql = "SELECT * FROM forum_msgs "
+ " WHERE owner_board_name = @BoardName "
+ " AND ( "
+ " ( @BlockIDFrom >= @BlockIDTo "
+ " AND ( ( BlockID > @BlockIDTo AND @withequal = 0 ) OR ( BlockID >= @BlockIDTo AND @withequal = 1 ) ) "
+ " AND ( BlockID <= @BlockIDFrom ) ) "
+ " OR ( @BlockIDFrom < @BlockIDTo "
+ " AND ( BlockID >= @BlockIDFrom AND @BlockIDFrom <> 0 ) "
+ " AND ( ( BlockID < @BlockIDTo AND @withequal = 0 ) OR ( BlockID <= @BlockIDTo AND @withequal = 1 ) ) ) "
+ " ) "
+ " ORDER BY BlockID DESC, BlockOrderID ";
IDataReader drMessageTree = SqlDbProvider.ExecuteReader( sql,
SqlHelper.MakeInParam( "@BoardName", BoardName ),
SqlHelper.MakeInParam( "@BlockIDFrom", nFirstBlockID ),
SqlHelper.MakeInParam( "@BlockIDTo", nNextBlockID ),
SqlHelper.MakeInParam( "@withequal", nBlockCount < PageSize + 1 ? 1 : 0 ) );
现在改成这样了:
sql = "SELECT * FROM forum_msgs "
+ " WHERE owner_board_name = @BoardName "
+ " AND ( ";
if ( nFirstBlockID >= nNextBlockID )
{
if ( nBlockCount < PageSize + 1 )
{
sql += " ( BlockID >= @BlockIDTo ) ";
}
else
{
sql += " ( BlockID > @BlockIDTo ) ";
}
sql += " AND ( BlockID <= @BlockIDFrom ) ";
}
else
{
sql += " ( BlockID >= @BlockIDFrom AND @BlockIDFrom <> 0 ) AND ";
if ( nBlockCount < PageSize )
{
sql += " ( BlockID <= @BlockIDTo ) ";
}
else
{
sql += " ( BlockID < @BlockIDTo ) ";
}
}
sql += " ) "
+ " ORDER BY BlockID DESC, BlockOrderID ";
IDataReader drMessageTree = SqlDbProvider.ExecuteReader( sql,
SqlHelper.MakeInParam( "@BoardName", BoardName ),
SqlHelper.MakeInParam( "@BlockIDFrom", nFirstBlockID ),
SqlHelper.MakeInParam( "@BlockIDTo", nNextBlockID ) );