Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Insertar imagen en base de datos LONGBLOB MySQL CSharp C#
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Insertar imagen en base de datos LONGBLOB MySQL CSharp C#

Publicar nuevo tema Responder al tema
Foros de discusión » VB.Net, C# .Net, Visual Studio .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Insertar imagen en base de datos LONGBLOB MySQL CSharp C# Responder citando

Estoy desarrollando una aplicación para gestión de mi empresa, soy un poco "novato", estoy usando Visual C# CSharp de Visual Studio .Net 2010 por que así me lo han impuesto. El motor de base de datos que uso es MySQL Server y he seguido las instrucciones de vuestro tutorial para conectar la aplicación C# con MySQL:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=629

Y para componentes enlazados (este es para VB.Net pero me ha valido como concepto):

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=567

me funciona todo bien pero ahora quiero añadir la opción en un formulario de insertar una imagen en un campo de tipo LONGBLOB (creo que es este tipo el que tengo que utilizar) de una tabla de MySQL y no sé cómo hacerlo. En un futuro necesitaré insertar ficheros PDF, no sé si será el mismo procedimiento para todo.

Como he dicho, como método de conexión, utilizo ADO.Net (MySQL Connector Net).
MensajePublicado:
Vie Dic 14, 2012 10:53 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Insertar imagen en base de datos LONGBLOB MySQL CSharp C Responder citando



Anuncios



varios escribió:
Estoy desarrollando una aplicación para gestión de mi empresa, soy un poco "novato", estoy usando Visual C# CSharp de Visual Studio .Net 2010 por que así me lo han impuesto. El motor de base de datos que uso es MySQL Server y he seguido las instrucciones de vuestro tutorial para conectar la aplicación C# con MySQL:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=629

Y para componentes enlazados (este es para VB.Net pero me ha valido como concepto):

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=567

me funciona todo bien pero ahora quiero añadir la opción en un formulario de insertar una imagen en un campo de tipo LONGBLOB (creo que es este tipo el que tengo que utilizar) de una tabla de MySQL y no sé cómo hacerlo. En un futuro necesitaré insertar ficheros PDF, no sé si será el mismo procedimiento para todo.

Como he dicho, como método de conexión, utilizo ADO.Net (MySQL Connector Net).


A continuación te mostramos un código de ejemplo en C# para insertar un fichero en un campo de tipo LONGBLOB de MySQL mediante ADO.Net:

Código:

            if (conectarBD())
            {
                conexionBD.ChangeDatabase("nombre_base_datos_MySQL");
                string rutaFicheroInsertarBD = "C:\\documento.pdf";
                byte[] ficheroBLOB;
                System.IO.FileStream streamFicheroMemoria =
                    new System.IO.FileStream(rutaFicheroInsertarBD,
                        System.IO.FileMode.Open, System.IO.FileAccess.Read);
                System.IO.BinaryReader readerBinario =
                    new BinaryReader(streamFicheroMemoria);
                System.IO.FileInfo fichero =
                    new FileInfo(rutaFicheroInsertarBD);
                ficheroBLOB = readerBinario.ReadBytes((int)(fichero.Length));
                string consultaSQL =
                    "INSERT INTO tabla (campo_ficheor) VALUES (?campo_fichero)";
                MySqlCommand comandoSQLEjecutar =
                    new MySqlCommand(consultaSQL, conexionBD);
                MySqlParameter parametroLongBlob =
                    new MySqlParameter("?campo_fichero", MySqlDbType.LongBlob);
                parametroLongBlob.Size = ficheroBLOB.Length;
                parametroLongBlob.Value = ficheroBLOB;
                comandoSQLEjecutar.Parameters.Add(parametroLongBlob);
                int rAff = comandoSQLEjecutar.ExecuteNonQuery();
                comandoSQLEjecutar.Dispose();
                comandoSQLEjecutar = null;
                readerBinario.Close();
                readerBinario.Dispose();
                streamFicheroMemoria.Close();
                streamFicheroMemoria.Dispose();
                streamFicheroMemoria = null;
                readerBinario = null;
            }
            else
            {
                MessageBox.Show("Para el acceso a la base de datos " +
                        "debe realizar la conexión con el servidor " +
                        "en la pestaña 'Configuración'.",
                        "Conexión con servidor BD. Se anulará el proceso.",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
            }



La función para conectar con la BD MySQL usando ADO.Net sería:

Código:

        private bool conectarBD ()
        {
            if (conexionBD != null)
                conexionBD.Close();

            string connStr =
                String.Format("server={0};port={1};user id={2}; password={3}; " +
                "database=mysql; pooling=false;" +
                "Allow Zero Datetime=False;Convert Zero Datetime=True",
                txtServidor.Text, txtPuerto.Text, txtUsuario.Text, txtContrasena.Text);
            try
            {
                conexionBD = new MySqlConnection(connStr);
                conexionBD.Open();
                return true;
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Error al conectar al servidor de MySQL [" +
                    txtServidor.Text + "]: " +
                    ex.Message, "Error al conectar",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }


En nuestro caso usamos una variable para guardar la conexión que declaramos en la clase del formulario:

Código:

  namespace AjpdSoftSepararPaginasPDF
  {
     public partial class formSepararPaginasPDF : Form
     {

        private MySqlConnection conexionBD;

       .........................



Y, obviamente, necesitarás varias referencias a namespaces en los using:

Código:

using MySql.Data.MySqlClient;
using System.IO;


Obviamente cambiarás la ruta del fichero por lo que quieras, el nombre de la base de datos a la que te conectarás y el INSERT a ejecutar para insertar el registro y el fichero asociado, da igual que sea PDF, jpg, bmp, avi, admite cualquier formato de fichero. Eso sí, te recomendamos que seas "prudente" y controles el tamaño máximo del fichero a insertar, también has de tener en cuenta que MySQL ya incluye una limitación por defecto para los ficheros a insertar en la BD que viene establecida por el parámetro: max_allowed_packet del fichero de configuración my.ini (Windows) o my.cnf (Linux).
MensajePublicado:
Vie Dic 14, 2012 11:02 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » VB.Net, C# .Net, Visual Studio .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A