Updated

Two close calls in the ninth inning led to a narrow loss for the Arizona Diamondbacks.

Darwin Barney hit a go-ahead single with two outs in the ninth and Chicago Cubs beat the Diamondbacks 5-3 Saturday night.

"The big play was the double play," Arizona manager Kirk Gibson said. "We had an opportunity to end it there. The call could have went either way but the umpire made his call."

In actuality, it was a near-double play that wasn't for the Diamondbacks — the second of two bang-bang plays in the inning.

With Marlon Byrd on first, Geovany Soto bunted back to reliever J.J. Putz (0-1), who made an off-target throw to second. Shortstop Stephen Drew dived to his right to catch the ball, barely keeping a toe on the bag to force Byrd.

After Cubs manager Mike Quade was ejected for arguing the call, Tyler Colvin walked.

Kosuke Fukudome then grounded back to the mound. Putz threw to Drew for the second out, but the shortstop double-clutched the throw to first baseman Russell Branyan and Fukudome was safe while Soto advanced to third.

Barney followed with a sharp single off the mound to give Chicago a 4-3 lead. Starlin Castro added an RBI single to make it a two-run game.

"Stephen did everything he could and Russell had a good stretch but he just beat it," Putz said. "It was just me not making a good pitch with two strikes on a guy, getting ahead but just not being able to finish."

Diamondbacks starter Ian Kennedy allowed three runs on six hits over 7 2-3 innings with a walk and six strikeouts.

"It's unfortunate because Ian gave us everything he had," Putz said. "I just wasn't able to finish."

Alfonso Soriano hit his 10th home run, tying him with Ryan Braun for the National League lead, and Matt Garza threw eight solid innings for the Cubs, who have won two straight after being routed 11-2 by the Diamondbacks on Thursday.

"Whoever coined the phrase pitching is 90 percent of the game either was really smart or was stating the obvious," Quade said. "It's about setting the tone and keeping your club in the game. We feel like we have the guys in place in the rotation."

Garza (1-3) scattered three runs on six hits with 10 strikeouts and two walks over a season-best eight innings for his first win with the Cubs.

"I don't have to win every game as long as we win every game I throw," Garza said.

Carlos Marmol pitched a hitless ninth for his seventh save.

Gerardo Parra tied the score in the sixth off Garza, hitting a wind-aided triple off the left-field wall just beyond the outstretched glove of Soriano that allowed to Chris Young to score standing up.

Justin Upton gave the Diamondbacks a 1-0 lead in the first, doubling to left and scoring on Drew's line single up the middle. Soriano's second-inning home run, his third in two games, bounced off the bottom of the mammoth scoreboard over the center-field batters' eye and tied the game at 1.

Soriano added a two-out RBI single in the fourth following Castro's leadoff double, and Aramis Ramirez doubled home Barney in the fifth to put the Cubs ahead 3-1.

Despite hitting .258 in the season's first month, Soriano has 20 RBIs.

Diamondbacks starter Ian Kennedy allowed three runs on six hits over 7 2-3 innings with a walk and six strikeouts.

NOTES: Cubs 1B Jeff Baker left the game in the top of the eighth with left shoulder soreness after jogging into second on a two-base error. ... Soriano extended his own Cubs' single-season record for home runs in April. ... Cubs 1B Carlos Pena was held out of the starting lineup for the second straight game. Pena is hitting .159 with no home runs and only five RBIs in 22 games. He entered the game after Baker's injury. ... The Diamondbacks sent C John Hester to Baltimore earlier Saturday to complete the December trade that sent 3B Mark Reynolds to the Orioles for RHP David Hernandez and RHP Kam Mickolio. Hester was batting .263 with a home run and five RBIs in 10 games for Triple-A Reno.