3 pagine in totale: <<Indietro 1 2 [3]
Estrazione di dati binari dal campo blob con ASP.NET
A questo punto le cose si semplificano, si tratta solo di compiere il procedimento inverso. Dobbiamo solamente stabilire cosa fare con i dati provienti dal campo. Possiamo scegliere tra inviare subito tutti i dati al client con Response.BinaryWrite:
<%@ Include Namespace="ByteFX.Data.MySQLClient"%>
<%@ Include Namespace="System.IO"%>
<script language="VB" runat="server">
Sub Page_Load()
Dim dt As New System.Data.DataTable()
Dim cn As New MySQLConnection("Server=localhost; Database=test; User ID=root; Password=;")
cn.Open
Dim adp = New MySQLDataAdapter("SELECT campo_blob FROM tabella", cn)
adp.Fill(dt)
if dt.Rows.Count> 0 then
Response.BinaryWrite(dt.Rows(0)("campo_blob"))
end if
dt.dispose()
adp.dispose()
cn.close()
cn.dispose()
End Sub
</script> Possiamo anche usarli per riempire uno stream (e quindi scrivere su file):
Sub Page_Load()
'connettiti a MySQL e riempi il datatable
'Opzione 1: scrivo su file...
Dim percorso As String = Server.MapPath("miofile.gif")
Dim binFile As New FileStream(percorso,Filemode.OpenOrCreate,FileAccess.Write)
binFile.write(dt.Rows(0)("campo_blob"), 0, dt.Rows(0)("campo_blob").length)
binFile.Close()
'chiudi la connessione e distruggi gli oggetti
End SubO ancora riconvertirli in stringa con la funzione BinToStr per un successivo utilizzo:
Dim dati As String
dati = BinToStr(dt.Rows(0)("campo_blob")) Considerazioni finali
Qual è l'effettiva praticità di utilizzare un campo blob per conservare dati che non siano file?
Gli usi possono essere svariati. Non è una pratica molto comune l'inserimento di stringhe in campi blob, ma qualche volta può tornare davvero utile, specie se si deve salvare qualcosa nel modo più compatto possibile.
Immaginate di dover realizzare un'applicazione per la creazione di mappe di teatri e cinema. Si dovrà costruire una griglia (array bidimensionale di byte) in cui potranno essere inseriti dei posti. Naturalmente ogni posto può avere una sua tipologia che faremo corrispondere ad un numero progressivo (tribuna = 1; poltronissima = 2; platea = 3; in piedi = 4; ecc... fino ad un massimo di 255). Volendo disegnare un posto in platea sulla fila 5, colonna 20 nella nostra griglia scriveremo:
Dim griglia(50,50) As Byte
griglia(5, 20) = 3 ' il 3 è il progressivo della platea Il grande vantaggio di usare questo metodo è che con un solo byte si definiscono coordinate e tipologia di posto.
Riempito tutto il nostro array bidimensionale, non ci resta che "mettere tutti i posti in fila" per ottenerne una collana di byte (cioè una stringa).
Dim i as Integer
Dim j as Integer
Dim posti As String = ""
for j = 0 to griglia.GetUpperBound(1)
for i = 0 to griglia.GetUpperBound(0)
posti &= Chr(griglia(i,j))
next
next
'connessione a MySQL
cmd.CommandText = "INSERT INTO tabella (campo_blob) VALUES (" & toHexString(posti) & ")"
cmd.ExecuteNonQuery()
'elimina gli oggettiPer estrarre i dati dal campo blob dovremo eseguire il procedimento inverso.
L'offset del byte (la sua posizione nella stringa) ci darà le coordinate, mentre il valore ne indicherà il tipo. Ecco il codice di esempio:
Dim offset As Integer = 520 'zero-based, indica il 521° byte
Dim coordX As Integer
Dim coordY As Integer
Dim tipologia As Integer
coordY = Math.ceiling((offset+1) / (griglia.getUpperBound(0)+1))
coordX = (offset+1) mod (griglia.getUpperBound(0)+1)
tipologia = Asc(posti.substring(offset,1))E con questo è tutto! Buon divertimento con i campi blob!
Approfondimenti
3 pagine in totale: <<Indietro 1 2 [3]
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Difficoltà

Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!
