Frage

Warum kann ich nicht einfügen? DBNull.Value in eine Nullable image-Feld in SQL Server 2005?

Ich habe diesen Code ausprobiert:

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

Artikel ist vom Typ 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; }
}

Beim Einfügen erhalte ich diese Ausnahme:

Operand type clash: nvarchar is incompatible with image

Warum DBNull.Value hat nur Probleme mit image?Warum nicht mit datetime?

War es hilfreich?

Lösung

Sie könnten Folgendes versuchen:

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

Andere Tipps

Ich denke, das könnte damit zu tun haben, dass Sie SqlParameter.SqlDbType nicht explizit definieren und denken, dass NVARCHAR angenommen wird.Anstatt AddWithValue zu verwenden, versuchen Sie, einen neuen SqlParameter hinzuzufügen und SqlDbType explizit auf SqlDbType.Image festzulegen.

Hier ist die MSDN-Ref was besagt, dass der Standardwert NVARCHAR ist.

Sie müssen den Typ des Parameters explizit als SqlDbType.Image angeben

Ich habe das so gelöst:

If (Photo.Equals(DBNull.Value)) Then
    cmd.Parameters.Add("Photo", SqlDbType.Image).Value = DBNull.Value
Else
    cmd.Parameters.AddWithValue("Photo", Photo)
End If
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top