You need to change the order in which you add the parameters to your OleDbCommand parameters collection
command.Parameters.Add("@refno",OleDbType.VarChar,255).Value=txtPCode.Text;
command.Parameters.Add("@body", OleDbType.LongVarChar).Value=rtfText;
command.CommandText = "insert into letter_master(total_ref,let_body)values (@refno,@body)";
conn.Open();
This is required by the OleDb provider that cannot recognize the parameter by their name, but only by their position.
This means that the first parameter's value added to the collection will be used where the first placeholder is found, the second for the second placeholder. So, in your original code, the OleDb provider will try to save the value from the richtextbox field in the field for the total_ref
causing the mentioned error.