Using a stored procedure is the best way to interact with a database. I’ll use an example from the Dilithium Networks TCAN system (case.aspx).
Don’t make your users wait unnecessarily. For example, a page where you generate a PDF and send it to someone else. Hand the job off to an asynchronous process and move on.