PHOENIX -- -Dan Haren told teammate Mark Reynolds before the game that "he had it tonight."
Then the Arizona right-hander went out and proved it against one of the best-hitting teams in baseball, striking out nine without a walk in the Diamondbacks 7-2 victory over the St. Louis Cardinals on Saturday night.
"He's tough," St. Louis manager Tony La Russa said, "made us look foolish a lot. He's got nasty stuff."
Haren (7-4) gave up two runs on six hits to improve to 4-0 in four career starts against the Cardinals, the first team he pitched for in the majors back in 2003-04.
"There's a handful of games every year where you've got everything working, where you've got all your pitches and feel good," Haren said, "and this was one of them."
He faced just one three-ball count and threw first-pitch strikes to 25 of 30 batters in a game that lasted just 2 hours, 28 minutes. Pitching on his own "bobblehead" night, Haren also singled twice in three at-bats to boost his season's batting average to .425.
"I hope this is a sign of many of these to come," Arizona manager A.J. Hinch said, "because he can get locked in and stay that way for a while."
Adam LaRoche had two of the Diamondbacks' four solo home runs. Reynolds had three hits, including an RBI double and his 15th home run of the season. Chris Snyder also homered for Arizona. Colby Rasmus had a solo home run for St. Louis.
Three of Arizona's homers came against Adam Ottavino (0-2), making his third major league start. Ottavino lasted just 3 2/3 innings, allowing six runs on nine hits.
"He had too many balls in the hot zone, the middle of the plate," La Russa said. "He gave them a lot of pitches to hit and they got 'em."
Haren retired the first 12 batters, four on strikeouts, before Matt Holliday doubled down the left field line to lead off the fifth. Ryan Ludwick followed with an RBI single up the middle to make it 6-1. The Cardinals went on to load the bases with one out on singles by Yadier Molina and Brendan Ryan. Haren, though, got pinch-hitter Felipe Lopez and David Freese to pop out to end the inning.
"If you don't take advantage of him and let him feel comfortable out there, he's going to get comfortable and pitch seven, eight, nine innings, and that's what happened, Albert Pujols, who was 0 for 3 and struck out once.
Rasmus led off the sixth with a home run. Haren retired the next eight before Rasmus singled with one out in the eighth.
In the first, Stephen Drew drew a two-out walk, advanced to second on a wild pitch, then scored when Reynolds doubled.
Reynolds and LaRoche hit consecutive two-out home runs to almost the exact same spot in the left-center seats. Snyder homered in the fourth, then Kelly Johnson and Drew had RBI doubles.
LaRoche led off the fifth with his second home run of the night. He has homered twice in a game three times this season, accounting for six of his nine home runs.
"It's not totally unusual for me to have them come in bunches," LaRoche said, "normally not in the same game like it is this year. But I'm starting to feel better. It started three days ago, I kind of tweaked some things in my stance to try to get in better position to drive the ball. Right now it's going pretty good."
Hinch noted that one of LaRoche's homers went to the opposite field, an indication of how well the first baseman is swinging. LaRoche agreed.
"When I'm driving the ball the other way, and I think it's very typical of all of us hitters, that's when you're in a good position to hit," he said, "That's what I want to get back to doing a little more often.'
Arizona activated C Miguel Montero and optioned C John Hester to Triple-A Reno. Montero has been sidelined with a sprained knee since April 11. ... RHP Jeff Suppan, who threw a bullpen session before the game, is expected to sign with the Cardinals and start Tuesday against Seattle. ... On an unseasonably cool day, the roof of Chase Field was open. ... Slumping Arizona RF Justin Upton, 6 for 31 in the home stand and the major league leader with 87 strikeouts, was dropped to seventh in the batting order. He was 0 for 4 with two strikeouts. ... Ottavino's first two career starts were nationally televised Saturday games.