2010-03-11 36 views
7

Tengo dificultades al intentar insertar archivos en una base de datos de SQL Server. Voy a tratar de descomponerlo lo mejor que puede:Cómo almacenar y recuperar imágenes usando SQL Server (Server Management Studio)

  1. Qué tipo de datos debo utilizar para almacenar archivos de imagen (JPEG/PNG/GIF/etc)? En este momento, mi tabla está utilizando el tipo de datos image, pero tengo curiosidad si varbinary sería una mejor opción.

  2. ¿Qué debo hacer para insertar la imagen en la base de datos? ¿Microsoft SQL Server Management Studio tiene funciones integradas que permiten la inserción de archivos en tablas? Si es así, ¿cómo se hace eso? Además, ¿cómo podría hacerse esto mediante el uso de un formulario HTML con PHP manejando los datos de entrada y colocándolos en la tabla?

  3. ¿Cómo puedo obtener la imagen de la tabla y mostrarla en la página? Entiendo cómo SELECCIONAR el contenido de la celda, pero cómo voy a traducir eso en una imagen. ¿Tendría que tener un encabezado (tipo de contenido: image/jpeg)?

tengo ningún problema en hacer cualquiera de estas cosas con MySQL, pero el entorno de SQL Server es todavía nuevo para mí, y yo estoy trabajando en un proyecto para mi trabajo que requiere el uso de procedimientos almacenados para agarrar varios datos.

Se agradece toda la ayuda.

Respuesta

5

El tipo image está en desuso, por lo tanto, no lo use.

La respuesta corta es usar el tipo FILESTREAM si se trata de SQL 2008 o varbinary(max) si es 2005 o anterior.

La mejor respuesta es utilizar el tipo FILESTREAM si se trata de SQL 2008, y no almacenar imágenes en la base de datos en caso contrario. Las bases de datos no están diseñadas para este tipo de cosas y arrojar BLOB allí puede perjudicar significativamente el rendimiento. FILESTREAM elude el problema al almacenar los datos reales en el sistema de archivos; todo lo demás es una solución por debajo del estándar.

En cuanto a cómo leer y escribir en una columna varbinary si elige tomar este enfoque no ideal, se representará como una secuencia en PHP. Eso es lo que obtienes de una consulta como el valor de la columna, y creo que eso es lo que tienes que poner como parámetro.

+0

Estamos usando SQL Server 2008, pero no parece haber un tipo 'FILESTREAM' en la lista desplegable. Si 'varbinary' funciona, entonces eso tendrá que hacer. La principal preocupación es encontrar una manera de insertar la imagen en la mesa. Gracias por notar que el tipo de imagen está en desuso, ya que me estaba inclinando hacia esa ruta.:) –

+0

@Joe Majewski: FILESTREAM está disponible en todas las versiones de SQL Server 2008. No ** use ** 'varbinary' cuando tenga FILESTREAM. No necesariamente lo verá en el menú desplegable; consulte la guía de inicio aquí: http://msdn.microsoft.com/en-us/library/bb933995.aspx – Aaronaught

+0

Bien, estoy investigando bien. ahora. Tenga en cuenta que estoy trabajando en una copia de la base de datos "real" porque no tengo privilegios para acceder a todos los datos, por lo que espero que la creación de una base de datos habilitada para filestream no cause problemas cuando se publique. –

0

Hay utilidad de inserción masiva aceptable desde la línea de comando bcp.exe. Lea this para obtener más información sobre cómo insertar datos binarios en MS SQL a través de t-sql.

+0

Oh, realmente me gusta la forma en que funciona la utilidad, pero no es exactamente lo que necesito. Básicamente, estoy trabajando en una aplicación para Northern Illinois University que almacena una imagen de cada estudiante que vive en las residencias estudiantiles. Cuando un estudiante trata de registrarse en la recepción, la persona que trabaja puede identificar que de hecho son un estudiante al verificar que la imagen coincida. No voy a insertar ninguna de esas imágenes en la base de datos. Solo necesito poder insertar con éxito una sola imagen con fines de prueba para asegurarme de que puedo recuperarla correctamente. –

+0

¿Hay alguna inserción que funcione con una sola ruta en el disco duro? –

Cuestiones relacionadas