لماذا لا يمكنني إدراج DBNull.Value في حقل صورة لاغية في SQL Server 2005؟
-
13-11-2019 - |
سؤال
لماذا لا أستطيع إدراج 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
لا تنتمي إلى StackOverflow