ADO.NET Data Services i tipus Image a Sql Server 2008

Considero que ADO.NET Data Services és una tecnologia que va molt bé per generar serveis web que gestionen una base de dades d’una manera ràpida i senzilla, a més a més, utilitza REST per comunicar-se amb el servei. Només per peticions HTTP es pot fer totes les operacions bàsiques a una base de dades. Aquestes peticions bàsiques segueixen una sintaxi determinada per un protocol estàndard que està definit a odata.org

Per tant hi treballo bastant però quan hi estic posat sempre recordo els tipus de dades de SQL Server que no son compatibles (de moment) amb aquesta tecnología. Al següent link hi ha el mapeig que es fa de tipus SQL Server a .Net Framework.

SQL Server Data Type Mappings

Un dels casos que ens podem trobar sovint és com gestionem les imatges. M’explico: Tenim un servei que emmagatzema imatges, per exemple les fotos del perfil, directament a la base de dades amb format binary (utilitzant per tant el tipus Image de Sql Server). Per sort aquest tipus de dades no té cap problema amb ADO.NET Data Services i es pot utilitzar tranquil·lament.

En la imatge es pot veure com les imatges es transporten com arrays binaris per la web.

Ara toca construir la nostra aplicació client web que ens permeti almenys visualitzar aquest contingut. Utilitzant DataBinding pots agafar un GridView i enllaçar-lo a un ObjectDataSource que ens farà de proxy per el servei ADO.NET. El GridView colocaràs un ImageField per poder enllaçar el camp de la imatge que t’arriba en format binary, però l’enllaç simple no et pot funcionar ja que el que vol ASP.NET aqui és una URL. Per exemple el següent tros de codi mostra el que no funcionarà, tingues en compte que el camp de la taula de la base de dades que conté la imatge en format binary és Image:

<asp:ImageField DataImageUrlField="Image" HeaderText="Image">
 </asp:ImageField>

Per tant una solució és tornar a demanar al servei que vols aquest camp però directament el seu valor. Per fer-ho construeixes la Url de la següent manera:

http://<url servei>/<nom servei>/<nom taula>(<valor clau primaria>)/Image/$value

el resultat final et quedaria com:

<asp:ImageField DataImageUrlField="IdRegistre" DataImageUrlFormatString="http://localhost:52159/Service.svc/Profiles({0})/Image/$value" HeaderText="Image">
 </asp:ImageField>

on IdRegistre indica el camp de la taula que és clau primaria.

Com pots veure ADO.Net Data Service és una bona manera de construir serveis per accedir a les taules de la base de dades sense haver d’escriure grans linies de codi. Tot l’accés és per HTTP i és aplicable des de JQUERY i Silverlight i altres sense cap tipus de problema.

Links que et poden ampliar aquesta informació o et poden interessar:

Images as a Service with ADO.NET Data Services

Retrieving Images from a Database ( C# )

ImageField.DataImageUrlFormatString (Propiedad)

Anuncis

Un pensament sobre “ADO.NET Data Services i tipus Image a Sql Server 2008

  1. Retroenllaç: ADO.NET Data Services y GUID | My freelancer life

Deixa un comentari

Fill in your details below or click an icon to log in:

WordPress.com Logo

Esteu comentant fent servir el compte WordPress.com. Log Out / Canvia )

Twitter picture

Esteu comentant fent servir el compte Twitter. Log Out / Canvia )

Facebook photo

Esteu comentant fent servir el compte Facebook. Log Out / Canvia )

Google+ photo

Esteu comentant fent servir el compte Google+. Log Out / Canvia )

Connecting to %s