Sadeera Samarawickrama smashed 93 to set up a 21-run win for Sri Lanka in their opening Super Four clash of the Asia Cup against Bangladesh on Saturday.
Samarawickrama's knock steered Sri Lanka to 257-9, a total their bowlers defended to put Bangladesh on the brink of elimination in the 50-over tournament, a precursor to the upcoming World Cup in India.
Bangladesh were bowled out for 236 in 48.1 overs despite a valiant 82 by Towhid Hridoy and suffered their second loss in the Super Four stage.
With one match to go, Bangladesh need a mathematical miracle for a place in the final on September 17.
Dasun Shanaka, who turned 32 on Saturday, played a captain's role with his 24 and three wickets from his medium-pace bowling.
Spinner Maheesh Theekshana and fast bowler Matheesha Pathirana also took three wickets each.
Sri Lanka, who co-host the tournament with Pakistan, faltered after being invited to bat first with Bangladesh fast bowlers getting regular breakthroughs.
However, Kusal Mendis (50) and then Samarawickrama made sure they reach a competitive and eventually a winning total on an inconsistent pitch.
Samarawickrama reached his 50 in 45 balls and accelerated in a 60-run partnership with Shanaka to rouse the home fans at a largely empty ground.
Sri Lanka slipped after a brisk start before Pathum Nissanka and Mendis put on 74 runs with some sensible batting, forcing Bangladesh skipper Shakib Al Hasan to rotate his bowlers.
Shoriful Islam was brought into the attack and he delivered with the wicket of Nissanka, trapped lbw for 40.
Mendis reached his fifty with a boundary off Shoriful in the next over but the fast bowler had his revenge four balls later to have him caught out.
The bowlers kept up the charge, but Samarawickrama turned the tide with a string of boundaries and finished off well as he surpassed his previous ODI best of 82. He was dismissed on the final ball.
Bangladesh started strongly with Mehidy Hasan Miraz hitting a few boundaries to take on the Sri Lankan attack alongside fellow opener Mohammed Naim.
Shanaka hit back with his medium-pace bowling to send back Miraz for 28.
Pathirana got the big wicket of Shakib, caught behind for three and with Liton Das' departure Bangladesh slipped to 83-4.
Mushfiqur Rahim and Towhid attempted to raise hopes of a fightback in a stand of 72 before Dunith Wellalage broke through with the wicket of Mushfiqur, who made 29.
The rest of the batting fell apart in trying to match the rising run-rate and Hridoy's lbw off Theekshana spelt the end.