Utilizzare i campi BLOB di MySQL con ASP.NET

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

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC