Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908

    [ASP.NET C#]Inserimento record da form in db Access

    Sto tentando di inserire dei dati in un db Access, tramite form, ovvero, popolo il form e, associando al click del pulsante il dovuto metodo, vorrei inseriri i dati. Mi riesce bene inserire dei dati statici, ovvero, non provenienti dal form, ma passati direttamente tramite la clausola INSERT, in questo modo:

    codice:
    protected void Button1_Click(object sender, EventArgs e) 
        {
            
            string Scn = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=" + Server.MapPath("clienti.mdb");
            OleDbConnection cnn = new OleDbConnection(Scn);
            cnn.Open();
            OleDbCommand cmd = new OleDbCommand("INSERT INTO Categories (Generi) VALUES (dato1)", cnn);
            OleDbDataReader esegui = cmd.ExecuteNonQuery();
        }
    Ora, vorrei fare in modo che, al posto del valore statico dato1, inserire un valore proveniente da una textbox, chiamata txtNome, qualcuno mi da una mano?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  2. #2
    Utente di HTML.it L'avatar di dwb
    Registrato dal
    Mar 2001
    residenza
    My IDE! :)
    Messaggi
    2,908
    Nessuno?
    ~Il nome di una variabile deve riflettere il suo scopo e non il suo tipo di dati, NET Framework.

  3. #3
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    ti dò una traccia: è in Basic e lo lascio in Basic e non lo traduco in c#

    pagina aspx
    codice:
    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="comandi parametrici con transazione.aspx.vb" Inherits="CorsoApogeo_wrox_gestione_dati_comandi_parametrici_con_transazione" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>Pagina senza titolo</title>
        <link href="../../../stili/Styles.css" rel="stylesheet" type="text/css" />
    <script language="javascript" type="text/javascript">
    // <!CDATA[
    
    function window_onload() 
    {
    	var messaggioJS = "<%=messaggioJS%>";
    	if(messaggioJS.length != 0) alert(messaggioJS);
    
    }
    
    // ]]>
    </script>
    </head>
    <body onload="return window_onload()">
        <form id="form1" runat="server">
            <asp:Button ID="Button1" runat="server" Text="Button" />
        </form>
    </body>
    </html>

    CodeFile
    codice:
    Option Strict On
    
    Partial Class CorsoApogeo_wrox_gestione_dati_comandi_parametrici_con_transazione
        Inherits System.Web.UI.Page
    
        Protected messaggioJS$ = "" 'serve nel client
    
        Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim Connessione As OleDbConnection = Nothing
            Dim Comando As OleDbCommand = Nothing
            Dim Transazione As OleDbTransaction = Nothing
            Dim Sql$ = ""
    
            Try
                Connessione = New OleDbConnection(StringaConnessioneTest)
                Connessione.Open()
                Transazione = Connessione.BeginTransaction()
                Comando = New OleDbCommand
                Comando.Connection = Connessione
                Comando.Transaction = Transazione
    
                Append(Comando)
                Update(Comando)
                Delete(Comando)
    
                'Transazione.Commit()
                Transazione.Rollback()
    
                messaggioJS = toStringaJS("Operazioni su database eseguite regolarmente")
    
    
    
            Catch ex As Exception
                If (Not (Transazione Is Nothing) AndAlso Not (Transazione.Connection Is Nothing)) Then Transazione.Rollback()
                Me.messaggioJS = toStringaJS("Errore nell'aggiornamento:" & vbNewLine & vbNewLine & exMessage(ex))
    
            Finally
                If (Not (Connessione Is Nothing)) Then Connessione.Close()
            End Try
        End Sub
    
        Private m_prossimo_id% = 0
    
        Private Sub Append(ByVal Comando As OleDbCommand)
            Me.m_prossimo_id = libreria.ProssimoIDAccess(Comando, "campi", "id")
            Dim Sql$ = "INSERT INTO [CAMPI] ( [PASSWORD], [TESTO], [MEMO], [DATA_ORA], [VALUTA], [SI_NO], [BYTE], [INTERO], [LONG], [SINGLE], [DOUBLE], [DECIMALE], [ID]) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) "
            Comando.CommandText = Sql
    
            Comando.Parameters.Clear()
    
            Comando.Parameters.Add("password", OleDbType.VarChar, 50).Value = DBNull.Value
            Comando.Parameters.Add("testo", OleDbType.VarChar, 50).Value = DBNull.Value
            Comando.Parameters.Add("memo", OleDbType.VarChar, 60000).Value = DBNull.Value
            Comando.Parameters.Add("data_ora", OleDbType.Date).Value = DBNull.Value
            Comando.Parameters.Add("valuta", OleDbType.Currency).Value = DBNull.Value
            Comando.Parameters.Add("si_no", OleDbType.Boolean).Value = DBNull.Value
            Comando.Parameters.Add("byte", OleDbType.TinyInt).Value = DBNull.Value
            Comando.Parameters.Add("intero", OleDbType.Integer).Value = DBNull.Value
            Comando.Parameters.Add("long", OleDbType.Integer).Value = DBNull.Value
            Comando.Parameters.Add("single", OleDbType.Single).Value = DBNull.Value
            Comando.Parameters.Add("double", OleDbType.Double).Value = DBNull.Value
            Comando.Parameters.Add("decimal", OleDbType.Decimal).Value = DBNull.Value
    
            Comando.Parameters.Add("id", OleDbType.Integer).Value = Me.m_prossimo_id
    
            Comando.ExecuteNonQuery()
    
    
        End Sub
    
        Private Sub Update(ByVal Comando As OleDbCommand)
            Dim Sql$ = "UPDATE [CAMPI] SET [PASSWORD] = ?, [TESTO] = ?, [MEMO] = ?, [DATA_ORA] = ?, [VALUTA] = ?, [SI_NO] = ?, [BYTE] = ?, [INTERO] = ?, [LONG] = ?, [SINGLE] = ?, [DOUBLE] = ?, [DECIMALE] = ? WHERE [ID] = ? "
            Comando.CommandText = Sql
    
            Comando.Parameters.Clear()
    
            Comando.Parameters.Add("password", OleDbType.VarChar, 50).Value = DBNull.Value
            Comando.Parameters.Add("testo", OleDbType.VarChar, 50).Value = DBNull.Value
            Comando.Parameters.Add("memo", OleDbType.VarChar, 60000).Value = DBNull.Value
            Comando.Parameters.Add("data_ora", OleDbType.Date).Value = DBNull.Value
            Comando.Parameters.Add("valuta", OleDbType.Currency).Value = DBNull.Value
            Comando.Parameters.Add("si_no", OleDbType.Boolean).Value = DBNull.Value
            Comando.Parameters.Add("byte", OleDbType.TinyInt).Value = DBNull.Value
            Comando.Parameters.Add("intero", OleDbType.Integer).Value = DBNull.Value
            Comando.Parameters.Add("long", OleDbType.Integer).Value = DBNull.Value
            Comando.Parameters.Add("single", OleDbType.Single).Value = DBNull.Value
            Comando.Parameters.Add("double", OleDbType.Double).Value = DBNull.Value
            Comando.Parameters.Add("decimal", OleDbType.Decimal).Value = DBNull.Value
    
            Comando.Parameters.Add("id", OleDbType.Integer).Value = Me.m_prossimo_id
    
            Comando.ExecuteNonQuery()
    
        End Sub
    
        Private Sub Delete(ByVal Comando As OleDbCommand)
            Dim Sql$ = "DELETE FROM [CAMPI] WHERE [ID] = ? "
            Comando.CommandText = Sql
    
            Comando.Parameters.Clear()
    
            Comando.Parameters.Add("id", OleDbType.Integer).Value = Me.m_prossimo_id
    
            Comando.ExecuteNonQuery()
    
        End Sub
    
    End Class
    qulche nota:
    L'esempio fa tre operazioni su database Access: Append, Update e Delete.
    Lo fa utilizzando una transazione: se tutto va a buon fine, fa il Commit, altrimenti fa il Rollback

    Nell'esempio faccio sempre il Rollback perchè sono interessato al collaudo e non a scrivere veramente i dati: tu devi commentare il Rollback e disicomentare il Commit.

    Il codice inserisce SOLO valori nulli, DBNull.Value. Tu devi metterci invece i valori ricevuti dal form, per esempio un campo testo: CampoTesto.Text

    La comunicazione col database è fatta esclusivamente con i parametri. L'uso dei parametri se vuoi fare una cosa ben fatta, lo devi considerare come obbligatorio.

    Con Access, non conta niente il nome dei parametri, ma solo il loro ordine. Per esempio:

    UPDATE [CAMPI] SET [PASSWORD] = ?, [TESTO] = ?, [MEMO] = ?,***
    bisogna immettere i parametri password, testo e memo, ***, nell'ordine

    nel mio esempio la tabella si chiama CAMPI ed i campi hanno nomi riservati, come password, ect, perciò li si deve chiudere con parentesi quadre.
    Pietro

  4. #4
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Ciao Pietro,
    perchè dici nel tuo ultimo post che se si vuole far le cose per bene bisogna utilizzare i paratri per forza?
    Cosa ho in più rispetto al creare la stringa per un UPDATE o un INSERT già con i valori senza utilizzare i parametri?

    grazie

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da ghini76
    Ciao Pietro,
    perchè dici nel tuo ultimo post che se si vuole far le cose per bene bisogna utilizzare i paratri per forza?
    Cosa ho in più rispetto al creare la stringa per un UPDATE o un INSERT già con i valori senza utilizzare i parametri?

    grazie
    Una risposta del 2007
    Allora, ti dico il mio pensiero.
    1) Utilizzo i parametri (in forma diversa naturalmente) fin dai tempi di ASP e non ho mai smesso di usarli.

    2) mai un problema con date, numeri o stringhe o altro in tanti anni, usando Access, Oracle e mysql

    Detto questo ci sono diverse possibilià per scrivere in un database
    1) si scrive l'sql da soli e questo è la cosa migliore, se si riesce a farlo però
    2) ci si affida ai programmatori della Microsoft che ci danno questo strumento
    3) ci si ostina a non volere usare gli strumenti del framework ma non si ha la capacità di scrivere sql

    Non so se ho reso l'idea :master: , comunque, tu che ne pensi?
    Pietro

  6. #6
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Azz è vero il post eradel 2007!
    Beh sono contento di trovarti ancora nel forum...

    Io sono circa 10 anni che lavoro su datatbase (anche io su access, oracle e mysql) con SQL e ho sempre usato stringhe SQL complete, senza parametri, aiutandomi con l'interfaccia di Access per costruire join complesse.
    Ho utilizzato qualche volta i parametri per lanciare stored procedure su Oracle ma solo in questo caso...

    Che ne penso? Che i parametri sicuramente aiutano a prevenire errori di tipo e il debug della query... io infatti volevo sapere se il vantaggio era solo quello durante le fasi di programmazione o c'erano vantaggi anche durante l'esecuzione in termini di velocità o carico della macchina per dire...
    poi c'è da dire che sono anche un tipo un po' pignolo e formale nello scrivere codice, quindi se è opinione generale che i parametri sono molto più giusto, migliore e più elegante di scrivere SQL allora mi adeguo volentieri alla tendenza... mi piace il codice pulito!

    A te la parola...

    ciao e grazie

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da ghini76
    Azz è vero il post eradel 2007!
    Beh sono contento di trovarti ancora nel forum...

    Io sono circa 10 anni che lavoro su datatbase (anche io su access, oracle e mysql) con SQL e ho sempre usato stringhe SQL complete, senza parametri, aiutandomi con l'interfaccia di Access per costruire join complesse.
    Ho utilizzato qualche volta i parametri per lanciare stored procedure su Oracle ma solo in questo caso...

    Che ne penso? Che i parametri sicuramente aiutano a prevenire errori di tipo e il debug della query... io infatti volevo sapere se il vantaggio era solo quello durante le fasi di programmazione o c'erano vantaggi anche durante l'esecuzione in termini di velocità o carico della macchina per dire...
    poi c'è da dire che sono anche un tipo un po' pignolo e formale nello scrivere codice, quindi se è opinione generale che i parametri sono molto più giusto, migliore e più elegante di scrivere SQL allora mi adeguo volentieri alla tendenza... mi piace il codice pulito!

    A te la parola...

    ciao e grazie
    :master: A dire il vero, che l'uso dei parametri porti a migliori prestazioni non l'ho mai letto da nessuna parte . Perciò credo che in fondo dipenda dal gusto di chi programma.
    Ciao
    Pietro

  8. #8

  9. #9
    Utente di HTML.it L'avatar di ghini76
    Registrato dal
    Jun 2003
    Messaggi
    560
    Grazie

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.