Столкновение типа операнда: nvarchar несовместим с изображением - PullRequest
10 голосов
/ 11 марта 2010

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

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

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

Operand type clash: nvarchar is incompatible with image 

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

Ответы [ 2 ]

14 голосов
/ 11 марта 2010

Если вы передадите 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()

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

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

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

cmd.ExecuteNonQuery();

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

0 голосов
/ 25 сентября 2010
 Dim photo_NULL As New SqlTypes.SqlBytes
.Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
.CommandType = CommandType.StoredProcedure
F_return = (.ExecuteNonQuery > 0)
...