Vamos a utilizar un textbox y un input file (que tiene que ser runat=Server)
para insertar los datos en la base de datos y en la siguiente página utilizaremos un control imagen para mostrar la imagen guarda.
Subir imagen al SQL Server.
Para insertar imágenes en Sql Server 2005 vamos a crear una tabla:
CREATE TABLE [dbo].[IMAGES_SQL](
[ID] [numeric](18, 0),
[Titulo] [varchar](150) NULL,
[Imagen] [image] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
HttpPostedFile ImgFile = ImagenFile.PostedFile;
Despues convertimos el fichero a una secuencia de bytes para poder alamcenarlo en el Sql Server 2005
Byte[] byteImage = new Byte[ImagenFile.PostedFile.ContentLength];
ImgFile.InputStream.Read(byteImage, 0, ImagenFile.PostedFile.ContentLength);
string sql = "insert into IMAGES_SQL(Titulo, Imagen)";
sql += " Values(@titulo, @Imagen)";
SqlConnection SqlConn = new SqlConnection("server=localhost;uid=sa;pwd=as;database=PRUEBAS");
SqlCommand SqlCom = new SqlCommand(sql, SqlConn);
SqlCom.Parameters.Add("@Titulo", System.Data.SqlDbType.VarChar, 150);
SqlCom.Parameters["@Titulo"].Value = txtTitulo.Text;
SqlCom.Parameters.Add("@Imagen", System.Data.SqlDbType.Image);
SqlCom.Parameters["@Imagen"].Value = byteImage;
if ((ImagenFile.PostedFile != null) && (ImagenFile.PostedFile.ContentLength > 0)) {
HttpPostedFile ImgFile = ImagenFile.PostedFile;
// Almacenamos la imagen en una variable para insertarla en la bbdd.
Byte[] byteImage = new Byte[ImagenFile.PostedFile.ContentLength];
ImgFile.InputStream.Read(byteImage, 0, ImagenFile.PostedFile.ContentLength);
string sql = "insert into IMAGES_SQL(Titulo, Imagen)";
sql += " Values(@titulo, @Imagen)";
SqlConnection SqlConn = new SqlConnection("server=localhost;uid=sa;pwd=as;database=PRUEBAS");
SqlCommand SqlCom = new SqlCommand(sql, SqlConn);
SqlCom.Parameters.Add("@Titulo", System.Data.SqlDbType.VarChar, 150);
SqlCom.Parameters["@Titulo"].Value = txtTitulo.Text;
SqlCom.Parameters.Add("@Imagen", System.Data.SqlDbType.Image);
SqlCom.Parameters["@Imagen"].Value = byteImage;
SqlConn.Open();
SqlCom.ExecuteNonQuery();
//SqlConn.Close();
SqlCommand SqlCom1 = new SqlCommand("Select MAX(ID) From IMAGES_SQL", SqlConn);
string lastID = SqlCom1.ExecuteScalar().ToString();
SqlConn.Close();
Response.Redirect("mostrar.aspx?ID=" + lastID);
}
Una vez que hemos insertado las imagnes en el Sql Server 2005 lo normal es que queramos leerlas y mostrarlas en el navegador, para esto realizamos los siguientes pasos:
Con una consulta SELECT buscamos la imagen recién insertada
string sql = "Select Imagen From IMAGES_SQL Where ID = " + Request.QueryString["ID"];
Devolvemos la imagen buscada en una variable de tipo byte:byte[] byteImage = (byte[])SqlCom.ExecuteScalar();
Y lo mostramos por pantalla especificando que lo que mostramos es una imagen:
.ContentType = "image/jpeg";
Response.Expires = 0;
Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(byteImage);
Response.End();
string sql = "Select Imagen From IMAGES_SQL Where ID = " + Request.QueryString["ID"];
SqlConnection SqlConn = new SqlConnection("server=localhost;uid=sa;pwd=as;database=PRUEBAS");
SqlCommand SqlCom = new SqlCommand(sql, SqlConn);
SqlConn.Open();
byte[] byteImage = (byte[])SqlCom.ExecuteScalar();
SqlConn.Close();
if (byteImage != null) {
Response.ContentType = "image/jpeg";
Response.Expires = 0;
Response.Buffer = true;
Response.Clear();
Response.BinaryWrite(byteImage);
Response.End();
}
Os dejo el codigo fuente del ejemplo
Enlaces relacionadas:
Código del artículo
Feliz programing!!