KANSAS CITY, Mo. -- Quick and efficient Roy Oswalt was the perfect pitcher for the Houston Astros a day after their debacle of a game.
The nine-year veteran threw first-pitch strikes to 21 of the 28 batters he faced, struck out seven and walked one in seven brisk innings Wednesday night while pitching the Astros to a 4-2 victory over Kansas City.
Instead of stumbling around and committing three errors as they'd done in a 15-7 loss the night before, the Astros played error-free and made several good plays behind their fast-paced ace. He went to a three-ball count only four times.
"Roy put us, as usual, in a good position," said Jason Michaels, who drove in three runs as the Astros snapped a four-game losing streak. "That was important, especially after a crazy night like last night. He did a tremendous job and we were able to get some runs for him."
One night after the Royals rapped out 20 hits, Oswalt (5-8) held them to two runs on six hits. The Astros won for the ninth time in their last 11 outings in Kauffman Stadium and snapped a four-game losing streak.
Oswalt earned his 142nd career win, all with the Astros, and two behind Joe Niekro's team record.
Bruce Chen (3-1) took the loss, his first since moving to the rotation on May 3. He went 5 2/3 innings and allowed five hits and four runs.
"The ball seemed like it was coming out of my hand pretty well," Oswalt said. "And I was keeping the ball low in the zone, not leaving balls in the middle of the plate the first pitch, and throwing some quality pitches. A lot of the pitches they let go were actually some good pitches on the corner that if they would have swung, they may have rolled over. I just felt in a groove early and was able to carry it through seven."
Matt Lindstrom pitched the ninth for his 15th save in 18 opportunities. It was his first appearance since June 8.
The game was delayed 1 hour, 25 minutes at the start by rain.
"We wanted to get to [Oswalt] early," said Royals manager Ned Yost. "We had some opportunities and then he really settled down. Our experience has been that if you're going to get him you better get him early."
David DeJesus was 4 for 4, tying his career high, and drove in Kansas City's second run with an RBI single in the third. He was 3 for 6 on Tuesday night and has reached 12 times in his last three games.
DeJesus came away as impressed as anyone with Oswalt.
"It seemed like he was 0-1, 0-2 on most of the hitters," he said. "He was throwing changeups on the first pitch for strikes and a lot of guys don't like to swing at that pitch, and that just puts you in a hole."
Jeff Keppinger doubled in the first and scored on Carlos Lee's single to put Houston ahead 1-0. Scott Podsednik then tripled leading off for the only extra-base hit the Royals would manage off Oswalt. He scored on Jason Kendall's sacrifice fly.
The Astros loaded the bases in the fourth with a walk, a single and an error by Mitch Maier in center field, ending his streak of 190 errorless games. Michaels hit a two-run single up the middle.
Michaels' double scored Lance Berkman to make it 4-2 in the sixth.
"The error hurt [Chen]," said Yost. "Mitch just took his eye off it a little. But all in all, Bruce did a nice job. He changed speeds and challenged the hitters. With a little help it could have been a different score."
Commissioner Bud Selig was on hand to announce in pregame ceremonies that Kansas City would host the 2012 All-Star Game. ... It was start No. 285 for Oswalt, third on Houston's all-time list. ... Royals are in a stretch where they'll play just three of 15 games at home. ... KC put RHP Luke Hochevar on the DL with a right elbow sprain and purchased the contract of RHP Anthony Lerew from Triple-A Omaha to take his place in the rotation.