South Africa condemned Sri Lanka to their fifth successive one-day international defeat with what home captain AB de Villiers described as a "clinical" five-wicket win in the second one-dayer at Buffalo Park on Saturday.
Despite an innings of 92 not out by Dinesh Chandimal, Sri Lanka's total of 236 for six was not enough to put real pressure on the home side, who sealed a well-paced run chase with eight balls to spare.
Hashim Amla made 55 and man-of-the-match JP Duminy an undefeated 66 for South Africa.
Amla hit five fours and two sixes and took advantage of the early powerplays as he and Graeme Smith (28) put South Africa in control with an opening partnership of 76.
Duminy, by contrast, hit only one boundary in his 87-ball innings - a six off Sri Lankan captain Tillekeratne Dilshan - as he played the anchor role in the second half of the innings.
Dhammika Prasad took three for 46 but South Africa were able to play cautiously against dangerman Lasith Malinga, who only conceded 38 runs but took his only wicket in his final over when the result was all but assured.
Sri Lanka have lost 12 out of 18 one-day internationals since contesting the World Cup final against India in April including the last three matches of their previous series, against Pakistan in the UAE, and the first encounter of their current five-match series.
Seeking a come back after a record defeat in the first match in Paarl, Sri Lanka made a poor start after being sent in on a slow pitch on an overcast day.
Dilshan was run out for his second successive nought and Kumar Sangakkara was caught behind for three as they struggled to 21 for two after ten overs.
Upul Tharanga, who made a solid 66, and Chandimal put on 84 for the third wicket to build a foundation for a late innings assault which yielded 109 runs off the last 15 overs.
But the tourists were seldom able to break a stranglehold imposed by tight South African bowling and tigerish fielding, which included two spectacular diving catches, by Dale Steyn at short fine leg to dismiss Mahela Jayawardene and Robin Peterson, running back from mid-on to end an aggressive innings of 22 off 13 balls by Nuwan Kulasekera.
"It was a better performance but we were 20 or 25 runs short," said Dilshan.
De Villiers said: "We could have done better in the last 15 overs but we picked up wickets at crucial times and it was a clinical batting performance."
Chandimal hit only one four in reaching his fifty off 84 balls but added five more boundaries off the remaining 31 balls of his innings to finish tantalisingly short of a third one-day international century in 19 matches.