Pourquoi ne puis-je pas insérer dbnull.value dans un champ d'image nullable dans SQL Server 2005?

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

Question

Pourquoi ne puis-je pas insérer DBNull.Value dans un nullable image-Field dans SQL Server 2005?

J'ai essayé ce code:

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();

L'article est de type 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; }
}

Lors de l'insertion, j'obtiens cette exception:

Operand type clash: nvarchar is incompatible with image

Pourquoi DBNull.Value a des problèmes uniquement avec image? Pourquoi pas avec datetime?

Était-ce utile?

La solution

Vous pouvez essayer ceci:

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

Autres conseils

Je pense que cela pourrait être à voir avec le fait que vous ne définissez pas explicitement le sqlparamètre.sqldbtype et pensez qu'il supposera nvarchar. Au lieu d'utiliser AddWithValue, en essayant d'ajouter un nouveau SQLParameter et de définir explicitement SQLDBTYPE sur SQLDBTYPE.IMAGE.

Voici le MSDN REF qui indique la valeur par défaut est nvarchar.

Vous devez spécifier explicitement le type du paramètre comme sqldbtype.image

J'ai résolu ceci comme ceci:

If (Photo.Equals(DBNull.Value)) Then
    cmd.Parameters.Add("Photo", SqlDbType.Image).Value = DBNull.Value
Else
    cmd.Parameters.AddWithValue("Photo", Photo)
End If
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top