¿Por qué no puedo insertar DBNull.Value en un campo de imagen que acepta valores NULL en SQL Server 2005?

StackOverflow https://stackoverflow.com/questions/8985374

Pregunta

¿Por qué no puedo insertar? DBNull.Value en un anulable image-campo en el servidor SQL 2005?

Probé este código:

SqlConnection conn = new SqlConnection(@"Data Source=.\sqlexpress;Initial Catalog=PrescriptionTrackingSystem;Integrated Security=True");

            conn.Open();

            SqlTransaction transaction = conn.BeginTransaction();

            SqlCommand command = new SqlCommand(@"INSERT INTO Customer(
                               ID
                              ,Name
                              ,TelephoneNumber
                              ,DateOfBirth,
                               InsuranceProvider,
                               PolicyNumber,Photo)
                          VALUES(
                               @ID
                              ,@Name
                              ,@TelephoneNumber
                              ,@DateOfBirth,
                               @InsuranceProvider,
                               @PolicyNumber,
                               @Photo)", conn);

            command.Transaction = transaction;

            command.Parameters.AddWithValue("@ID", 1000);
            command.Parameters.AddWithValue("@Name", item.Name);
            command.Parameters.AddWithValue("@TelephoneNumber", item.TelephoneNumber);
            if (item.DateOfBirth != null)
            {
                command.Parameters.AddWithValue("@DateOfBirth", item.DateOfBirth);
            }
            else
            {
                command.Parameters.AddWithValue("@DateOfBirth", DBNull.Value);
            }
            command.Parameters.AddWithValue("@InsuranceProvider", item.InsuranceProvider);
            command.Parameters.AddWithValue("@PolicyNumber", item.PolicyNumber);

            if (item.Photo != null)
            {
                command.Parameters.AddWithValue("@Photo", item.Photo);
            }
            else
            {
                command.Parameters.AddWithValue("@Photo", DBNull.Value);
            }

            int count = command.ExecuteNonQuery();

            transaction.Commit();

            conn.Close();

el artículo es de tipo Customer.

public class Customer
{        
    public string Name { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public string TelephoneNumber { get; set; }
    public string InsuranceProvider { get; set; }
    public int? PolicyNumber { get; set; }
    public byte [] Photo { get; set; }
}

Al insertar me sale esta excepción:

Operand type clash: nvarchar is incompatible with image

Por qué DBNull.Value tiene problemas solo con image?¿Por qué no con datetime?

¿Fue útil?

Solución

Podrías probar esto:

command.Parameters.Add("@Photo", SqlDbType.Image).Value = DBNull.Value;

Otros consejos

Creo que esto podría tener que ver con el hecho de que no está definiendo explícitamente SqlParameter.SqlDbType y creo que asumirá NVARCHAR.En lugar de usar AddWithValue, intente agregar un nuevo SqlParameter y configurar SqlDbType explícitamente en SqlDbType.Image.

Aquí esta la referencia de MSDN que indica que el valor predeterminado es NVARCHAR.

Debe especificar explícitamente el tipo de parámetro como SqlDbType.Image

Resolví esto así:

If (Photo.Equals(DBNull.Value)) Then
    cmd.Parameters.Add("Photo", SqlDbType.Image).Value = DBNull.Value
Else
    cmd.Parameters.AddWithValue("Photo", Photo)
End If
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top