Striker Cameron Jerome's volley just after the break gave 10-man Birmingham victory and extended their unbeaten home record to 11 games.
Doncaster dominated most of the game but hardly tested keeper Maik Taylor although they had a penalty shout when Lewis Guy went down in the box.
Birmingham had Mehdi Nafti sent off for lunging at James Coppinger.
But the Blues got the winner when Liam Ridgewell's ball was headed goalwards by Marcus Bent and Jerome volleyed in.
Birmingham manager Alex McLeish: "It wasn't pretty but hats off to the 10 men who went out there in the second half, dug deep, rolled their sleeves up and scored a fantastic goal.
"I'm grateful for the spirit of the players and I've got belief in them - I know they can play better.
"I think Doncaster passed it well and it was difficult for our midfielders to get close to them. But we defended well and had a good, solid back-four display."
Doncaster boss Sean O'Driscoll:
"I don't think the sending-off had an effect on the game whatsoever, it just made it a little bit easier for Birmingham to set their stall out and be nice and solid.
"When you lose against 10 men you have to give credit to the opposition - to be fair to them they worked hard but, for me, the sending-off didn't change the game.
"I can't fault the effort of the players, I can't fault what we tried to do. Overall, I thought the performance was excellent. We came here to perform and I think we did."
Bookmark with:
What are these?