Are the stairs Objects? If it were me, I'd do something like:
float halfRayHeight = 20.0f;
newPositionX = CharacterPositionX + MovementInXDirection;
newPositionY = CharacterPositionY + MovementInYDirection;
newPositionZ = CharacterPositionZ + MovementInZDirection;
float dist = dbIntersectObject( stairsID, newPositionX, newPositionY + halfRayHeight, newPositionZ, newPositionX, newPositionY - halfRayHeight, newPositionZ );
if( dist > 0 ) dbPositionObject( characterID, newPositionX, newPositionY + halfRayHeight - dist, newPositionZ );
As you can see from the code, the basic idea is to start a line from where you want the character to go next, up half of the lines height and extend it down half of its height. If the line intersects a polygon of your stair object, then the IntersectObject function will return a distance value; the distance from where the line began, to the point of intersection on the object. Thus you simply have to place your character at the start of the line minus the length of the collision.
Of course this would only calculate the ground collision, but with a little work the same concept could be implemented with collisions is any direction.