A ninth career hundred from Tamim Iqbal helped Bangladesh post an imposing total of 324/5 in their 50 overs to set up a 90 run victory.
Sri Lanka were never able to keep pace with the required run rate and steadily lost wickets as their ODI woes continued.
Soumya Sarkar (10) nicked off to Suranga Lakmal early in the Tigers innings having looked in good touch.
Despite the early loss Sabbir Rahman (54) and Tamim set a great platform for the innings with a 90 run second wicket partnership before a blinding catch from Upul Tharanga sent the number three packing, off the bowling of Asela Gunaratne.
Mushfiqur Rahim lasted just two balls before scooping a low full toss straight back to Lakshan Sandakan. After the initial appeal, the umpires were unmoved but replays showed the ball had not hit the ground and the keeper was gone for one.
That brought Bangladesh star Shakib-al-Hasan to the wicket and he would share a 144 run partnership with Tamim.
Tamim became the first Bangladesh batsman to score 10,000 international runs across the three formats during his knock of 127.
Shakib (72) would depart at the death in pursuit of a big finish as he tried to ramp Lakmal over fine leg but holed out.
Tamim was dropped on the boundary when on 121 with the ball deflecting off Danushka Gunathilaka's hands for six.
The opener failed to make the most of the life though as he hit the very next ball off Lahiru Kumara down to the same fielder and had to go.
Mosaddek Hossain (24 off 9 balls) and Mahmudullah (13 off 7 balls) gave the visitors a big finish though plundering 35 runs off the last 13 balls of the innings.
Lakmal's figures of two for 45 made him the pick of the Sri Lankan bowlers.
It took just three balls for Bangladesh to start making inroads into the Sri Lankan batting as Mashrafe Mortaza trapped Gunathilaka leg before for a duck.
The Tigers kept it tight early on and struck again in the sixth over when Kusal Mendis (4) tried to get after debutant Mehedi Hasan and was caught.
Upul Tharanga (19) will kick himself for tamely chipping Taskin Ahmed to mid on to leave Sri Lanka in a world of trouble at 31/3.
Dinesh Chandimal and Gunaratne (24) put on 56 for the fourth wicket before Shakib got in on the wicket party when the latter hit a reverse sweep straight to backward point.
Chandimal brought up his 21st ODI fifty but tellingly couldn't go on to a hundred as he fell to Mehedi for 59.
Milinda Siriwardana (22) would be well caught by substitute fielder Shuvagata Hom off the bowling of Mustafizur Rahman to leave Sri Lanka in all sorts of trouble at 153/6.
Thisara Perera was determined to make a fist of the chase but had a hard time finding a willing and able partner as Sachith Pathirana (31), Suranga Lakmal (8) and Lakshan Sandakan (3) all fell.
On the end Thisara would hole out for 55 off 35 balls and Bangladesh would record only their second ODI win over Sri Lanka.
Mustafizur returned figures of three for 56 to be the pick of the Tiger's bowlers.