SQL Server proporciona un tipo de datos especial: imagen, que es un tipo que contiene datos binarios. El siguiente ejemplo le muestra cómo colocar texto o fotografías en una base de datos. En este artículo veremos cómo almacenar y leer imágenes en SQL Server.
1. Cree una tabla:
Cree una tabla con esta estructura en SQL SERVER:
2. Almacene imágenes en la base de datos de SQL SERVER
Para almacenarlas en la tabla, primero debe cargarlas en su servidor WEB. Puede desarrollar un formulario web, que se utiliza para importar imágenes desde el control web TextBox en el cliente. Aparece su servidor WEB. Establezca su propiedad encType en: myltipart/formdata.
Stream imgdatastream = File1.PostedFile.InputStream;
int imgdatalen = File1.PostedFile.ContentLength;
string imgtype=
File1.PostedFile.ContentType
; byte[imgdatalen];
int n = imgdatastream.Read(imgdata, 0, imgdatalen);
string connstr=((NameValueCollection)Context.GetConfig("appSettings"))["connstr"]
;
Comando SqlCommand = nuevo SqlCommand
("INSERT INTO ImageStore(imgtitle, imgtype, imgdata)
VALORES (@imgtitle, @imgtype, @imgdata)", conexión
SqlParameter paramTitle = nuevo SqlParameter
("@imgtitle", SqlDbType.VarChar, 50); ;
paramTitle.Value
= imgtitle;
comando.Parameters.Add
( paramTitle
paramData=
nuevo SqlParameter( "@imgdata", SqlDbType.Image );
nuevo SqlParameter ("@imgtype", SqlDbType.VarChar, 50);
paramType.Value = imgtype;
comando.Parameters.Add( paramType)
;
int numRowsAffected = comando.ExecuteNonQuery()
; 3.
Reanude la lectura de la base de datos.
¡Ahora leamos los datos que ingresamos desde SQL Server! Enviaremos la imagen a su navegador, también puede almacenarla en la ubicación que desee.
private void Page_Load(remitente del objeto, System.EventArgs e)
{
cadena imgid =Request.QueryString
["imgid"];
cadena connstr=((NameValueCollection)
Context.GetConfig("appSettings"))["connstr"];
"SELECCIONE imgdata, imgtype DESDE ImageStore id = " + imgid;
conexión SqlConnection = new SqlConnection(connstr);
comando
SqlCommand
= new SqlCommand(sql, conexión.Open
();
(dr.Read())
{
Response.ContentType = dr["imgtype"].ToString();
Response.BinaryWrite( (byte[]) dr["imgdata"]
}
conexión.Close()
}
Nota es Response.BinaryWrite en lugar de Response.Write.
Aquí hay un programa de almacenamiento y lectura para C# Winform. Compare las diferencias usted mismo (para mayor comodidad, he simplificado los campos de la base de datos en dos: imgtitle e imgdata.
usando System;
usando System.Drawing;
usando System.Collections;
usando System.ComponentModel;
usando System.Windows.Forms;
usando System). .Data;
usando System.IO;
usando System.Data.SqlClient;
espacio de nombres WindowsApplication21
{
///
/// Descripción resumida de Form1
///
clase pública Form1: System.Windows.Forms.Form
{
Private System.Windows .Forms. Botón botón1;
///
/// Variables de diseñador requeridas
///
componentes privados System.ComponentModel.Container = nulo;
cadena privada ConnectionString=
"Seguridad integrada = SSPI; Catálogo inicial =; DataSource = localhost;"
;
privado SqlCommand cmd = nulo;
privado System.Windows.Forms.Button botón2;
privado System.Windows.Forms.PictureBox pic1;
privado
System.Windows.Forms
. Label label2;
private string nowId=null;
public Form1()
{
//
//
Requerido para la compatibilidad con Windows Forms Designer
//
InitializeComponent();
conn
= new SqlConnection(ConnectionString);
Llamada a InitializeComponent
//
}
///
/// Limpia cualquier recurso en uso.
///
anulación protegida void Dispose( bool disposing )
{
if (conn.State == ConnectionState.Open)
conn.Close();
if( disposing )
{
if (components!= null)
{
componentes.Dispose(
)
;
base.Dispose( disposing );
}
#región Código generado por el Diseñador de formularios de Windows
///
/// El diseñador admite el método requerido; no utilice el editor de código para modificar
/// el contenido de este método.
///
private void InitializeComponent()
{
this.button1 = nuevo System.Windows.Forms.Button();
this.pic1 = nuevo System.Windows.Forms.PictureBox()
; Botón();
this.openFileDialog1 = nuevo System.Windows.Forms.OpenFileDialog();
this.label2
=
nuevo
System.Windows.Forms.Label(
)
;
.Ubicación = nuevo Sistema.Drawing.Point(0, 40);
this.button1.Name = "botón1";
this.button1.Size = nuevo System.Drawing.Size(264, 48)
; ;
this.button1.Text = "Agregar nueva imagen";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// pic1
//
this.pic1.Location = new System.Drawing.Point ( 280, 8);
this.pic1.Name = "pic1";
this.pic1.Size = nuevo System.Drawing.Size(344, 264);
this.pic1.TabIndex
= 3
; //
botón2
//
this.button2.Location = new System.Drawing.Point(0, 104);
this.button2.Name = "button2";
this.button2.Size = nuevo System.Drawing.Size(264, 40 );
this.button2.TabIndex = 4;
this.button2.Text = "Restaurar imagen desde la base de datos";
this.button2.Click
+
=
new System.EventHandler(this.button2_Click)
;
.Filter = ""Archivos de imagen (*.jpg, *.bmp, *.gif)|*.jpg|*.bmp|*.gif"""
//
// etiqueta2
//
this.label2.Location = nuevo Sistema .Drawing.Point(0, 152);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(264, 48);
this.label2.TabIndex
= 5
; Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(632, 273);
this.Controls.AddRange(new System.Windows.Forms. Control[ ] {
this.label2,
this.button2,
this.pic1,
this.button1});
this.Name = "Form1";
this.Text = "Form1";
this.Load += new System.EventHandler(this. Form1_Load) ;
this.ResumeLayout(false);
}
#endregion
///
/// El punto de entrada principal de la aplicación.
///
[STAThread]
static void Main()
{
Application.Run(new Form1()
}
private void button1_Click(remitente del objeto, System.EventArgs e)