Столкновение типа Operand: nvarchar несовместим с изображением

Я использую хранимую процедуру SQL Server 2008 для создания новой записи с помощью этот синтаксис:

cmd.Parameters.Add("@photo", DBNull.Value)
cmd.ExecuteNonQuery()

но результат:

Operand type clash: nvarchar is incompatible with image 

Фотография не является единственным параметром, но является единственной картиной, я не прохожу мимо nvarchar, но нулевое значение, я что-то пропустил?

Ответ 1

Если вы передадите значение DBNull.Value в качестве значения, ADO.NET не сможет определить, какой тип должен быть. Если вы укажете строку или целочисленное значение, тип параметра SQL можно получить из предоставленного значения - но какой тип должен DBNull.Value быть преобразован в?

При передаче значения NULL вам нужно указать, что SqlDbType самостоятельно, явно:

Dim photoParam As New SqlParameter("@photo", SqlDbType.Image)
photoParam.Value = DBNull.Value
cmd.Parameters.Add(photoParam)

cmd.ExecuteNonQuery()

Это должно сработать, надеюсь!

Обновление: то же самое в С# будет:

SqlParameter photoParam = new SqlParameter("@photo", SqlDbType.Image);
photoParam.Value = DBNull.Value;
cmd.Parameters.Add(photoParam);

cmd.ExecuteNonQuery();

Там есть отличный, бесплатный, очень полезный конвертер VB.NET-to-С# - используйте его!

Ответ 2

 Dim photo_NULL As New SqlTypes.SqlBytes
.Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
.CommandType = CommandType.StoredProcedure
F_return = (.ExecuteNonQuery > 0)