Rob Hulse had scored twice in the previous home game against Coventry and he netted the winner again after Paul Green had cancelled out Gylfi Sigurdsson's opener.
The result gives Derby some breathing space and takes them three points above Reading who remain too close to the bottom three for comfort.
The game had been held up for nearly five minutes when Brian Howard was injured defending a corner and after the Reading midfielder was led away to the dressing room, Gary Teale tested Adam Federici with a 25-yard shot.
Reading had a better chance in the 29th minute when Jimmy Kebe was in on the right, but lifted the ball high over the bar and Stephen Bywater reacted quickly to save at Simon Church's feet three minutes later.
Federici almost let in Paul Dickov when he slipped, but the Reading keeper did well in the 42nd minute when he dived to punch away a cross from Paul Green before Rob Hulse could pounce.
It had been a poor scrappy first half, but Reading were in front 11 minutes into the second when Jay Tabb opened up Derby's defence with a surging run into the box and Sigurdsson fired in from 15 yards off the foot of a post.
Derby were level within five minutes with Teale crossing low from the left touchline for Green to bag his second of the season from close range.
Green missed another good chance minutes later but Derby were in front in the 74th minute when Teale's backheel played in Jay McEveley whose excellent cross was dispatched at the near post by Hulse.
Reading's hopes suffered another blow five minutes later when Long was shown a red card for a lunge on Fredrik Stoor, but the visitors were denied a point by Bywater who turned over a drive from Alex Pearce in stoppage time.