لماذا لا يمكنني إدراج DBNull.Value في حقل صورة لاغية في SQL Server 2005؟

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

سؤال

لماذا لا أستطيع إدراج DBNull.Value إلى قيمة لاغية image-الحقل في خادم SQL 2005؟

لقد جربت هذا الكود:

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

البند من النوع 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; }
}

عند الإدراج أحصل على هذا الاستثناء:

Operand type clash: nvarchar is incompatible with image

لماذا DBNull.Value وقد حصلت مشاكل فقط مع image؟لماذا لا مع datetime?

هل كانت مفيدة؟

المحلول

يمكنك تجربة هذا:

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

نصائح أخرى

أعتقد أن هذا قد يكون له علاقة بحقيقة أنك لم تحدد بشكل صريح SqlParameter.SqlDbType وأعتقد أنه سيفترض NVARCHAR.بدلاً من استخدام AddWithValue، حاول إضافة SqlParameter جديد وتعيين SqlDbType بشكل صريح إلى SqlDbType.Image.

هنا المرجع MSDN الذي ينص على أن الافتراضي هو NVARCHAR.

تحتاج إلى تحديد نوع المعلمة بشكل صريح كـ SqlDbType.Image

لقد حللت هذا مثل هذا:

If (Photo.Equals(DBNull.Value)) Then
    cmd.Parameters.Add("Photo", SqlDbType.Image).Value = DBNull.Value
Else
    cmd.Parameters.AddWithValue("Photo", Photo)
End If
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top