Problemas encontrados al almacenar imágenes en C # y sacar imágenes de la base de datos

Directorio

1. Introducción

2. Conflicto de tipo de operando: nvarchar es incompatible con la imagen

Descripción del problema

La causa del problema

Solución

3. La consulta parametrizada en C # '(@ imagen PERSONAL_PHOTO, @ SURNAME nvarchar (4000), @ MIN_NAME nvarcha' requiere el parámetro '@PASSPORT', pero no se proporciona el parámetro.

Descripción del problema

Causa del problema

Solución

4. Al obtener datos de imagen de la base de datos, me encontré con el problema de cómo determinar si los datos de imagen obtenidos son nulos

Descripción del problema

Referencia

Anímate todos los días, vamos!


1. Introducción

Recientemente, estoy trabajando en un proyecto de C # basado en el marco MVC. Descubrí que el terminal web necesita transferir la información del usuario a la base de datos guardada en segundo plano y obtenerla de los datos y luego hacerla eco en la interfaz web. La información contiene imágenes. Algunas preguntas, grabe aquí

2. Conflicto de tipo de operando: nvarchar es incompatible con la imagen

Descripción del problema

Al enviar la información de front-end, hay una imagen que no se cargó. Este problema se produce al escribir en la base de datos. El tipo de imagen en la base de datos es imagen.

La causa del problema

Si la base de datos es del tipo Imagen, cuando se ejecuta la instrucción de inserción, si el valor insertado es DBNull.Value, solicita: Conflicto de tipo de operando: nvarchar es incompatible con la imagen; la razón de este problema es la razón para no especificar DbType. En la mayoría de los casos, al usar SqlParameter, no es necesario especificar el tipo de datos del parámetro (DbType o SqlDbType). ADO.Net determinará automáticamente el tipo de datos de acuerdo con el tipo de valor. Incluso si ADO.Net no puede determinarlo, el servidor de base de datos SQLServer puede Aproveche al máximo el juicio (por supuesto, se perderá algo de rendimiento).
Pero para el tipo de imagen en este programa, no tengo tanta suerte. Si no se especifica DbType y los datos son Null / DbNull, ado.net reconoce el tipo de datos como nvarchar, y se produce el error anterior. Tan solo especifique DbType o SqlDbType.

Solución

nuevo SqlParameter ("@ Photo", SqlDbType.Image) {Value = recrument.PASSPORT}

3. La consulta parametrizada en C # '(@ imagen PERSONAL_PHOTO, @ SURNAME nvarchar (4000), @ MIN_NAME nvarcha' requiere el parámetro '@PASSPORT', pero no se proporciona el parámetro.

Descripción del problema

Después de resolver el problema anterior, apareció un nuevo problema, la imagen aún no se subió, por lo que reclutamiento.PASSPORT = null

Causa del problema

Piense directamente en nulo en C # como nulo en sql, por lo que se considera que el parámetro no se proporciona

Solución

Nulo en C # no es lo mismo que nulo en SQL. El nulo en SQL se expresa en C # como DBNull.Value

nuevo SqlParameter ("@ Photo", SqlDbType.Image) {Value = TableSqlCon.TODBNull (recrument.PASSPORT)}

 public static object TODBNull(byte[] image)
        {
            if (image != null)
            {
                return image;
            }
            else
            {
                return DBNull.Value;
            }
        }

4. Al obtener datos de imagen de la base de datos, me encontré con el problema de cómo determinar si los datos de imagen obtenidos son nulos

Descripción del problema

Los datos de la imagen obtenidos de los datos se verán obligados a convertirse al tipo byte [], como reclutamiento. PASAPORTE = (byte []) dt.Rows [0] [21]; pero cuando la imagen está vacía, se informa un error: el sistema no se puede utilizar. DBNull se convierte en byte [], y luego trato de juzgar si está vacío, si (dt.Rows [0] [21]! = Null) y otros intentos, todos fallan

Solución

 Escritura correcta: if (dt.Rows [0] [21] es System.DBNull)

 if (dt.Rows[0][21] is System.DBNull)
                    {
                        recruitment.PASSPORT = null;
                    }
                    else
                    {
                        recruitment.PASSPORT =(byte[]) dt.Rows[0][21];
                    }

Referencia

https://blog.csdn.net/weixin_30675967/article/details/99175174?depth_1-utm_source=distribute.pc_relevant.

https://blog.csdn.net/kaixin_5200_kaixin/article/details/23115953

https://blog.csdn.net/weixin_30270889/article/details/97839671

Anímate todos los días, vamos!

30 artículos originales publicados · Me gusta1 · Visitas1158

Supongo que te gusta

Origin blog.csdn.net/chunchunlaila/article/details/105353856
Recomendado
Clasificación