Acceso a datos sql

De nuevo estoy mirando uno de los proyectos que hemos hecho en clase y es un acceso a datos simple atacando a la base de datos de ejemplo northwind a la tabla category con edit, update etc... Al eliminar o actualizar al principio me decía que los tipos de datos ntext y nvarchar no eran compatibles, entonces estuve mirando un foro por ahí y vi que cambiando ntext por varchar(max) se solucionaría el problema, eso ha sido así, pero el tema es que abajo hay una columna llamada picture con el tipo de dato image que da la misma incopatibildad que antes pero no encuentro ningún foro que me diga porque, te agradecería una respuesta, si necesitas algún dato más ya me lo dirás.

1 Respuesta

Respuesta
1
Las columnas de tipo Image son especiales, para grabarles algún dato debes pasar la información como un array de Bytes, esa es la razón del error que te arroja.
Que quieres decir, no entiendo, que le ponga en el data type al lugar de image, le ponga bit, porque eso es lo que he hecho y tampoco me deja eliminar y actualizar, me sale esto ahora
<h2>Implicit conversion from data type sql_variant to bit is not allowed. Use
the CONVERT function to run this query.
</h2>
Como ves soy bastante nulo je je, solo es por curiosidad porque sino me cargare la columna entera y ya esta es de una base de datos de ejemplo, pero me gustaría saberlo porque me puedo encontrar con la tesitura, gracias un saludo.
A y otra cosa yo en mi gridview, en el datasource no pido la columna picture, pero en la tabla si que esta, gracias otra vez
Luego he encontrado este código por ahí pero no se donde ponerlo ni siquiera si es a lo que te referías:
Almacenar una imagen en disco procedente de una base de datos (VB.NET)
Suponemos que tenernos rellenado el dataset_imagen con la información relativa a la imagen.
 Dim imagen, miniatura As Image
        Dim datosBlob() As Byte
        datosBlob = CType(dataset_imagen.Tables(0).Rows(e.Item.ItemIndex)("campo_blob_que_contiene_la_imagen"), Byte())
        Dim imagenmemoria As MemoryStream
        imagenmemoria = New MemoryStream(datosBlob)
        imagen = Image.FromStream(imagenmemoria)
        Dim nuevoAlto As Integer
        Dim nuevoAncho As Integer
        If imagen.Height > imagen.Width Then
            nuevoAlto = 80
            nuevoAncho = (imagen.Width * 80) / imagen.Height
        Else
            nuevoAncho = 80
            nuevoAlto = (imagen.Height * 80) / imagen.Width
        End If
        miniatura = New Bitmap(nuevoAncho, nuevoAlto, imagen.PixelFormat)
        Dim grafico As Graphics = Graphics.FromImage(miniatura)
        grafico.CompositingQuality = Drawing2D.CompositingQuality.HighQuality
        grafico.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
        Dim rectangulo As Rectangle
        rectangulo = New Rectangle(0, 0, nuevoAncho, nuevoAlto)
        grafico.DrawImage(imagen, rectangulo)
        miniatura.Save(path_en_disco, Imaging.ImageFormat.Jpeg)
Perdona que sea tan pesado pero al final he cambiado la query en el datasource y he sacado todo lo relacionado con image y así funciona el update pero no me deja borrar el registro porque supongo que tiene algún tipo de relación con otra tabla ya que dice que
FK_Products_Categories no se puede borrar, pero no me importa mucho la verdad, de todas maneras si quieres contestarme a lo de antes como aclaración mejor sino da por cerrada la respuesta y yo cerrare también y puntuare, gracias, 3er saludo
Si, el código que colocaste es a lo que me refería.
Con respecto al error es por integridad referencial de la base de datos, si as a eliminar un registro de esa manera, lo que debes es crear un campo de estado: Activo, Inactivo, cuando vayas a eliminar un registro y no te lo permita inactivas el registro con este campo, Claro que en tus querys debes especificar este campo en el WHERE para que no muestre los registros que estén inactivos.
Ok pero perdona que te moleste otra vez, donde debería colocar el código...
en el load? De mi archivo .vb porque lo hice y me daban un montón de errores supongo que seria por los nombres que no son los míos, de echo yo no he creado ningún data set solo arrastre un gridview y puse en el datasource las select, updates etc...
Hum
Esa es una muy mala técnica ( mi opinión personal) esto, debido a que si tienes que hacer algún cambio en el query (SELECT) etc. no se puede hacer pues esos controles enmascaran unas cantidad de cosas que el programador no tiene acceso a ellas, al final dificulta las mdificaciones del programa.
Con respecto al error CLARO esos son los nombre de ejemplo que yo coloco no es que hagas copy/ paste al código exacto que te envío, DEBES adaptarlo a lo que tu tienes, recuerda, yo no estoy viendo el código que tu tienes o estas escribiendo.
No si es que estamos estudiando muchas maneras de hacerlo, esta era una de ellas, por ejemplo en uno de ellos hemos creado un dataset con su table adapter, lugo una clase apuntando al tableadapter y luego un windowsform apuntando a la clase mediante código o por el asistente, luego creando procedimientos almacenados desde vb y luego haciendo uso de ellos, pero como todo en este curso un poco de todo y mucho de nada de ahí que tuviera esas dudas pero ya me has ayudado bastante puesto que veo que esta forma rápida de hacer una query con el datasource su resultado no es optimo, sino es una base de datos sin muchas puñetitas, gracias otra vez y me eres de mucha ayuda, no tardare mucho en volverte a preguntar algo, porque estamos estudiando xpath, y xslt y de esto ultimo que si xhtml y demás y no me entero mucho, sobretodo en web, un saludo espero por si quieres decir algo y cierro la pregunta.
Ok, aquí estaré para ayudarte si puedo con mucho gusto!.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas