Bueno, la pregunta tiene muchas partes, y cada una de ellas por separado es bastante larga de contestar, asi que convendria que afinases un poco mas cuales son las partes que no sabes hacer. Basicamente los pasos son estos:
Para almacenar la imagen:
- Construir una pagina html con un FileUpload y un Submit que vaya a parar a un Click en el servidor
- En el Click, leer el Filecontent y pasarlo a un array de bytes
- Con ese array de bytes, salvarlo en un campo binario en la base de datos
Para presentarla en un boton:
- Construir una pagina que tenga un <a> y dentro un <img> (o hacer el equivalente mediante un ImageButton), y en el SRC del IMG apuntar a un recurso en el servidor que pueda servir la imagen, tal como un .ashx
- En el ashx, tomar el dato enviado en la QueryString y con eso recuperar desde la base de datos el array de bytes
- Devolver los bytes en el Response despues de ajustar el Header para indicar el tipo de imagen.