Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [VB.NET] Salvare immagini su SQL.

    Salve ragazzi,

    per poter salvare un'immagine ho trovato in giro un frammento di codice che ho adattato alle mie esigenze:

    ...
    'oggetti per il salvataggio dei dati
    Dim adapterDati As OleDbDataAdapter = New OleDbDataAdapter(Sql, condati)
    Dim cmdBuilder As OleDbCommandBuilder = New OleDbCommandBuilder(adapterDati)
    Dim dtsDati As New DataSet()

    adapterDati.MissingSchemaAction = MissingSchemaAction.AddWithKey

    'Carico il dataset
    adapterDati.Fill(dtsDati, "Azienda")

    'Creo un datarow che mi rappresenta la nuova riga
    Dim dtrRiga As DataRow = dtsDati.Tables("Azienda").NewRow()
    dtrRiga("LOGO") = ImgData
    ...

    il problema è però che la riga in grassetto non aggiorna il record esistente ma ne crea uno nuovo e questo per il suffisso .newrow().
    Domanda:
    come devo fare per aggiornare il record esistente?

    Saluti

  2. #2
    Fai riferimento alla collezione Rows della DataTable invece di usare la funzione NewRow che ti restituisce una nuova DataRow.
    Non è comunque buona cosa salvare "un'immagine" in un campo della tabella del Db.
    Facci sapere...
    Ciao

  3. #3
    Ho risolto! Eccovi il codice (anche perché vedo che l'argomento è molto interessante):

    '***** SALVO L'IMMAGINE SUL DB
    Dim fs As FileStream = New FileStream(Me.txtFoto.Text, FileMode.OpenOrCreate, FileAccess.Read)
    Dim ImgData(fs.Length) As Byte

    Dim Rs As New ADODB.Recordset()
    Dim Cn As ADODB.Connection
    Try
    fs.Read(ImgData, 0, System.Convert.ToInt32(fs.Length))
    fs.Close()

    Cn = oCN.CreateConnection() 'Creo una connessione
    Dim Sql As String = "Select * from Azienda"
    Rs = New ADODB.Recordset
    With Rs
    .Open((Sql), Cn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText) 'EDIT
    ...
    .Fields("LOGO").Value = ImgData
    ...
    .Update()
    End With

    MessageBox.Show("Registrazione effettuata con successo.")

    Catch ex As Exception
    MessageBox.Show("Errore: " & ex.Message)
    Finally
    'Chiudo la connessione
    If Not Cn Is Nothing Then
    If Cn.State = ConnectionState.Open Then
    Cn.Close()
    End If
    End If
    End Try



    '***** CARICO L'IMMAGINE DAL DB
    Dim Dimensionebuffer As Integer = 300000
    Dim outbyte(300000 - 1) As Byte
    Dim reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.SequentialAccess )

    'leggo il primo record
    reader.Read()

    Dim arrayStreamDati() As Byte = reader.Item("LOGO")

    If arrayStreamDati.Length > 0 Then

    'Carico in uno memoryStream l'array strem dati
    Dim Stream As MemoryStream = New MemoryStream(arrayStreamDati, True)
    Stream.Write(arrayStreamDati, 0, arrayStreamDati.Length)

    'Creo un oggetto bitmap contente l'immagine
    Dim immagine As Bitmap = New Bitmap(Stream)

    'carico nella picture box
    Me.picLogo.Image = immagine
    picLogo.SizeMode = PictureBoxSizeMode.StretchImage

    'Chiudo lo stremadati
    Stream.Close()
    End If


  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Ma perchè usi ADODB ???
    In NET si usa ADO.NET

    Osservando il tuo codice sembra che il tuo DB sia un MDB di Access.
    Spero per te che non sia così...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.