Operand type clash: nvarchar is incompatible with image

后端 未结 2 1299
青春惊慌失措
青春惊慌失措 2021-01-17 17:22

I\'m using a SQL Server 2008 stored procedure to create a new record with this syntax:

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


        
相关标签:
2条回答
  • 2021-01-17 17:42
     Dim photo_NULL As New SqlTypes.SqlBytes
    .Pararameters.AddWithValue("@photo", IIf(IsNothing(Photo), photo_NULL, Photo))
    .CommandType = CommandType.StoredProcedure
    F_return = (.ExecuteNonQuery > 0)
    
    0 讨论(0)
  • 2021-01-17 17:48

    If you pass in DBNull.Value as the value, ADO.NET can't figure out what type the parameter should be. If you specify a string, or an integer value, the type of the SQL parameter can be derived from the value provided - but what type should DBNull.Value be turned into??

    When passing in a NULL value, you need to specify that SqlDbType yourself, explicitly:

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

    That should work, I hope!

    Update: same thing in C# would be:

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

    There's a great, free, very useful VB.NET-to-C# converter out there - use it!

    0 讨论(0)
提交回复
热议问题