3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Inserimento di dati binari nel campo blob con ASP.NET
Se i dati risiedono in un file presente fisicamente su disco, si può usare la comoda funzione LOAD_FILE di MySQL:
<%@ Include Namespace="ByteFX.Data.MySQLClient"%>
<%@ Include Namespace="System.IO"%>
<script language="VB" runat="server">
Sub Page_Load()
Dim percorso As String = Server.MapPath("../cartella/filedainserire.gif")
Dim cmd As New MySQLCommand()
Dim cn As New MySQLConnection("Server=localhost; Database=test; User ID=root; Password=;")
cn.Open()
cmd.Connection = cn
cmd.CommandText = "INSERT INTO tabella (campo_blob) VALUES (LOAD_FILE('" & percorso.replace("\","/") &"'))"
cmd.ExecuteNonQuery()
cmd.Dispose()
cn.close()
cn.dispose()
End Sub
</script> L'uso del Replace sul percorso serve a sostituire i backslash che è un carattere riservato in MySQL.
Analogamente, se avessimo dovuto fare una UPDATE, il comando sarebbe stato:
cmd.CommandText = "UPDATE tabella SET campo_blob = LOAD_FILE('" & percorso.replace("\","/") & "')"
cmd.ExecuteNonQuery()Se si desidera inserire manualmente dei dati occorre usare la notazione esadecimale, come nell'esempio:
cmd.CommandText = "INSERT INTO tabella (campo_blob) VALUES (0xFF4514F0)"
cmd.ExecuteNonQuery()Vediamo come è composta questa sequenza 0xFF4514F0.
Lo 0x iniziale indica che tutto ciò che segue è in formato esadecimale perciò va inserito una sola volta all'inizio.
La restante parte FF4514F0 è la concatenazione di gruppi di 2 caratteri: FF 45 14 F0. Ognuno di essi (es: FF) rappresenta un carattere ascii. Nel nostro caso si tratta di ÿ dal momento che FF convertito in decimale risulta 255, e Chr(255) restituisce appunto ÿ.
Quindi, spiegata la notazione da usare, possiamo costruire delle funzioni che partendo da una stringa oppure da un oggetto Stream, restituiscano una catena esadecimale inseribile in un campo blob.
Function toHexString(input as String) As String
Dim output As String = "0x"
Dim i As Integer
if input.length> 0 then
for i = 0 to input.length ? 1
output &=DectoHex(Asc(input.substring(i,1)))
next
end if
return output
End Function
Function toHexString(input as Stream) As String
Dim output As String = "0x"
while input.position < input.length
output &= DectoHex(input.ReadByte())
end while
return output
End Function
Function DecToHex(input as Integer) As String
Dim output As String
output = (Math.floor(input/16)).toString().replace("10", "A").replace("11", "B").replace("12","C").replace("13", "D").replace("14", "E").replace("15", "F")
output &= (Math.floor(input mod 16)).toString().replace("10","A").replace("11", "B").replace("12","C").replace("13", "D").replace("14","E").replace("15", "F")
return output
End Function L'overload di toHexString ci permette di inserire una stringa in un campo blob.
Sub Page_Load()
'connessione a MySQL: vedi sopra
cmd.CommandText = "INSERT INTO tabella (campo_blob) VALUES (" & toHexString("Ciao a tutti!!") & ")"
cmd.ExecuteNonQuery()
'dispose degli oggetti di connessione
End Sub Oppure il contenuto di un oggetto Stream. L'esempio mostra come può essere caricato un file facendo a meno della funzione LOAD_FILE di MySQL:
Sub Page_Load()
'connessione a MySQL: vedi sopra
Dim binFile As New FileStream(percorso, FileMode.Open, FileAccess.Read)
cmd.CommandText = "INSERT INTO tabella (campo_blob) VALUES (" & toHexString(binFile) & ")"
cmd.ExecuteNonQuery()
'dispose degli oggetti di connessione
End Sub 3 pagine in totale: <<Indietro 1 [2] 3 Avanti >>
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.








Difficoltà

Stampa
Download 



