Why not just use
SELECT * FROM Tr_Purcahse WHERE CreatedDate BETWEEN @FDate AND @TODate AND BCODE = @BCODE
The example you show will either return all records where BCODE matches, or none at all depending on the value you pass to the procedure in @CRDATE, not the value in the DB.
Unless your CreatedDate column is an NVARCHAR - in which case change your DB and make it a DATETIME before it starts giving you real problems.