You must be exhausted you poor thing - and your DS. Unless you have incredible reserves of energy, you can't carry on like that - having to hold him for three hours in the middle of the night. You'll go crazy from lack of sleep.
I personally am not anti-controlled crying like the previous posters (though I'm so sorry they've had bad experiences), I know too many people whose lives it has helped so much and I think different things work for different people and children (though personally I would never just leave a child to cry themselves to sleep, I've used the reassurance method of going back in, rubbing back, leaving. etc.
HOWEVER, your DS has obviously got into a habit he loves, and it's going to take a bit of toughness on your part to change things. It's simple - he likes being rocked, and he wants you to carry on. We'd all love to be rocked to sleep next to a warm loving body! There's no deeper theory about it, I don't think.
My 2yo DS was ill with pneumonia recently and I put him in the bed with me for about five nights till he was better. And, naturally, when he was better, he didn't want to go back in his cot.
I am a very cuddly physically affectionate type of mum, and though I adored having his warm little body next to me, I know full well the negative effects of lack of sleep on me. So I just bit the bullet and didn't brook any argument over it.
We went back to his normal bed-time routine, then, after his book, he went into his cot and I walked out the room. He would cry for about five minutes and then usually go to sleep, if he didn't, I would go in, murmur softly to him, rub his back and leave. Usually this would take only half an hour or so. And if it didn't, I would sit on the floor by sleep, then leave. I refused to give in and take him out of his cot - ever - because I knew I needed my sleep back. After three nights it was fine. And I've done this with him always when his sleep has gone awry. He's back to sleeping 12 hours a night.
You just need to tell him (they understand so much) and you, that you are NOT going to be doing any rocking any more. And brace yourself for some hard few nights of putting him down, leaving him for a bit, going back in, reassuring. And if you're brave and you think he's okay, leave him a bit longer, seven minutes, 10. He WILL start going to sleep in his cot if you stay strong.
You could also let him fall asleep while you're in the room, if you really can't bare to leave him. I think the most important thing is not to take him out of his cot - unless he's actually hysterical whereupon you could reassure him with a hug, then put him down.
Children suffer a lot worse hardships than being encouraged to go to sleep in a comfy bed. He needs to re-learn how to settle himself to sleep - and you need to help him.
Good luck! (and sorry- have just noticed this is a major essay!