Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    Problema nell'eseguire un'insert

    ho il seguente codice:


    Dim utente As String = TextBox1.Text
    If String.IsNullOrEmpty(utente) Then
    MessageBox.Show("Devi inserire un utente")
    TextBox1.Focus()
    Exit Sub
    End If
    cn = New OleDbConnection()
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\enzo.ENZO-59B7B5DDEE\Documenti\Visual Studio 2005\Projects\prova\prova\Db1.mdb;Persist Security Info=False"
    cn.Open()
    Try

    Dim stringSql1 As String = "INSERT INTO UTENTI(Utente,Password) VALUES('" & utente & "',' ' )"
    MessageBox.Show(stringSql1)

    Dim myOleDbCommand As OleDbCommand = New OleDbCommand(stringSql1, cn)
    Dim da As New OleDbDataAdapter
    Dim ds As New DataSet
    da.InsertCommand = myOleDbCommand
    da.Fill(ds, "UTENTI")

    Catch exception As Exception

    Finally
    cn.Close()
    End Try



    l'insert non viene eseguita........
    se provo ad eseguire l'insert direttamente in ACESS ottengo un messaggio:"Vuoi accodare le righe?"...confermando con OK si ha l'inserimento....

    cosa devo fare?

    tulipan

  2. #2
    Ma non ci sei.
    [list=1][*]Primo la connessione la apri dentro il Try seno' se va in errore non ti accorgi.[*]Secondo il Fill del dataset popola i dati di un SELECT COMMAND ...[*]Terzo se fai un INSERT devi usare OleDbComando.ExecuteReader|Scalar|NonQuery[/list=1]

    Quindi rivedi il codice che hai scritto perchè fa tutto tranno inserire un record.
    Inoltre se vuoi farlo da dateset avresti primo dovuto inserire la nuova riga nella DataTable a quel punto avresti dovuto lanciare [Dataset].Update ...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    ti chiedo scusa ma è da un giorno che uso vb 2005!!!!

    sto cercando di imparare....




    tulipan

  4. #4
    noproblem
    A sto punto ti consiglio di capire cosa sono:
    - OleDbCommand
    - DataReader
    - DataAdapter
    - DataTable
    - DataSet

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    La connessione va aperta all'esterno del Try, in questo caso, poiché c'è un Finally che ne garantisce la chiusura (e ovviamente può chiudere una connessione solo se questa è stata aperta), a meno di non aggiungere o modificare codice o strutturare la parte di gestione dell'errore in modo differente, o inserendo ad esempio il controllo dello stato della connessione nel blocco Finally.

    Per quanto riguarda il problema specifico, se si tratta di inserire un semplice record, credo che DataSet, Adapter, ecc. non siano strettamente necessari: basta invocare il metodo ExecuteNonQuery dell'oggetto OleDbCommand per eseguire il comando e ottenere il numero di record inseriti nella tabella (direi 1).

    Piuttosto, suggerirei di evitare la specificazione di parametri "in linea" con lo statement SQL della query, sostituendo il concatenamento delle stringhe con valori parametri, identificati dal segnaposto "?" (nel caso di OLE DB e delle classi che appartengono al namespace System.OleDb); in questo modo, anche quando si tratta di valori più "delicati" e soggetti ad impostazioni internazionali, come data/ora e valori a virgola mobile, si delega alla libreria il compito di effettuare le dovute conversioni, eludendo inoltre possibili intrusioni di SQL Injection.

    Un pezzo di codice (non verificato) per esemplificare il tutto:

    codice:
            ' Crea una nuova connessione ai dati
            Dim MyConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\enzo.ENZO-59B7B5DDEE\Documenti\Visual Studio 2005\Projects\prova\prova\Db1.mdb;Persist Security Info=False")
    
            ' Apre la connessione ai dati
            MyConnection.Open()
    
            Try
    
                ' Crea il comando per l'inserimento dei dati
                Dim MyCommand As New OleDbCommand("INSERT INTO UTENTI (Utente, Password) VALUES (?, ?)", MyConnection)
    
                ' Definisce i parametri del comando
                Dim MyParam As OleDbParameter
    
                ' Valorizza il parametro con il nome dell'utente
                MyParam = New OleDbParameter("Utente", OleDbType.VarChar, 50)
                MyParam.Value = Utente
                MyCommand.Parameters.Add(MyParam)
    
                ' Valorizza il parametro con la password
                MyParam = New OleDbParameter("Password", OleDbType.VarChar, 32)
                MyParam.Value = Password
                MyCommand.Parameters.Add(MyParam)
    
                ' Esegue il comando di inserimento
                MyCommand.ExecuteNonQuery()
    
            Finally
    
                ' Garantisce la chiusura della connessione ai dati
                MyConnection.Close()
    
            End Try
    Il codice è a solo scopo esemplificativo: non l'ho mandato in esecuzione e non ne ho verificato la correttezza, serve solo a rendere l'idea.

    P.S.: attento che alcuni DB considerano l'identificatore Password una parola chiave.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.