+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [ASP.Net]Inserimento fallito

  1. #1
    sanfra non è in linea Scolaretto
    Post
    373

    [ASP.Net]Inserimento fallito

    Salve, sto facendo un semplice inserimento dell'ip in una tabella di db access con ASP.NET 2.0 express edition;

    la tabella è così strutturata:

    id_ip(contatore);
    IP(testo);
    utente(testo);

    Faccio una funzione dove dichiaro due parametri e ritorna un valore bool:

    codice:
     public bool takeip(string ip, string utente)
        {
    
    
    
            try
            {
                myCommand = new System.Data.OleDb.OleDbCommand();
                myConnection = new System.Data.OleDb.OleDbConnection();
                myConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\DataEntry\\App_Data\\DataEntry1.mdb");
                myCommand.CommandText = "INSERT INTO indirizzo(IP,utente)VALUES(@IP,@utente)";
                myCommand.Parameters.AddWithValue("@IP", ip.ToString());
                myCommand.Parameters.AddWithValue("@utente", utente.ToString());
                myCommand.Connection = myConnection;
                myConnection.Open();
                myCommand.ExecuteNonQuery();
                myConnection.Close();
    
                return true;
            }
            catch (Exception er)
            {
    
                Response.Write(er.Message);
                return false;
            }
        }

    e poi la richiamo nell'evento button1_click:

    codice:
    protected void Button1_Click(object sender, EventArgs e)
        {
     
            try{
            
            myConnection = new System.Data.OleDb.OleDbConnection();
            myConnection = new System.Data.OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Inetpub\\wwwroot\\DataEntry\\App_Data\\DataEntry1.mdb");
            test = "select * from Login";
            myCommand = new System.Data.OleDb.OleDbCommand(test, myConnection);
            myConnection.Open();
            odb1 = new System.Data.OleDb.OleDbDataAdapter();
            odb1.SelectCommand = myCommand;
            System.Data.OleDb.OleDbDataReader myReader = myCommand.ExecuteReader();
            
           
                if (myReader.HasRows)
                {
                    while (myReader.Read())
                    {
    
                        string uname = myReader["Login"].ToString();
                        string pass = myReader["Password"].ToString();
                        if (String.Compare(uname, TextBox2.Text.Trim()) == 0 && String.Compare(pass, TextBox1.Text.Trim()) == 0)
                        {
                            Session["uname"] = TextBox1.Text.Trim();
                            string ip = Request.UserHostAddress.ToString();
                            string utente = Session["uname"].ToString();
    
                            if (takeip(ip.Trim(), utente.Trim()) == true)
                            {
    
                                Response.Redirect("./index.aspx");
    
    
                            }
                            else
                            {
                                Response.Write("Errore Imprevisto");
    
    
                            }
                            
                        }
                        else
                        {
                            errore.Text = "Utente non Riconosciuto";
    
                        }
    
                    }
                }
            }
            catch(Exception er){
                
             Response.Write(er.Message + er.Source + er.StackTrace);   
                
            }
        }
        
            
        }
    La cosa strana è che non mi da nessun errore, ma non mi carica niente nella tabella.

    La tabella è giusta e anche i campi

    potete dirmi che errore sto facendo
    Grazie

  2. #2
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...hai provato a mettere un bel breakpoint nella funzione...e controllare se entra nel blocco catch?...ci arriva?
    ...un consiglio....quante volte instanzi l'oggetto OleDbConnection....basta fare così:
    //la stringa di connessione sarebbe cosa buona e giusta inserirla nel web.config per //non ripeterla in ogni parte del codice
    OleDbConnection connection = new OleDbConnection("stringa di connessione");

  3. #3
    sanfra non è in linea Scolaretto
    Post
    373
    Si entra nel blocco try/catch ma non da nessun errore a video.
    MI spieghi in quale punto del web.config va messa la stringa?

    Grazie

  4. #4
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...allora prima cosa dal blocco catch Response.Write non "s'accetta proprio" , nel senso che è tipico di ASP si cerca di evitare(almeno in questo caso) in ASP.NET....
    1)sarebbe cosa buona e giusta avere un "sistema" di log per tenere traccia degli errori;
    2)se vuoi saltare il primo punto(se si tratta di un'applicazione di prova) almeno visualizzare l'errore in una label predisposta a contenere eventuali errori...per esempio:
    lblError.Text = exc.Message;
    3)devi abituarti ad usare il debug, senza è impossibile...di conseguenza se premi f9 sulla prima riga contenuta nel blocco catch nel tuo caso corrisponde a Response.Write(er.Message); => da sotituire con quanto sopra
    inserisci un break...andando in debug vs si fermerà sul break....
    4)con Asp.Net puoi indicare nel web.config la tua stringa di connessione...in particolare in ASP.NET 2.0 esiste proprio la sezione connectionStrings...dal codice invece per recuperare il valore devi usare:
    ConfigurationManager.ConnectionStrings("key");
    Inoltre sempre in ASP.NET 2.0 ti consiglio di dare uno sguardo a Web Site Administration Tool

    ....ultima cosa prima di aggiungere i valori alla collection dei paramater:
    objCommand.Parameters.Clear()
    Ultima modifica di SignIn; 08-08-2007 22:14 

  5. #5
    sanfra non è in linea Scolaretto
    Post
    373
    Posso chiederti come creare dei file log con ASp.NET,io li ho sempre creati con PHP

    per il resto adesso tutto funziona (almeno per il momento)!

    Grazie

  6. #6
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...bhè dipende.,....visto che sei alle prime armi con ASP.Net ti consiglierei di farti una classe Log in cui non fai altro che scrivere su di un file txt quando qualche tuo modulo va in errore...altrimenti io ti consiglierei di studiarti l'Application Block Logging...si tratta di una library di Microsoft per la gestione dei log...qui trovi tutti gli application block:
    Download details: Enterprise Library 3.1

    ps: per curiosità come mai non scriveva nella tabella? il clear dei parameter?

  7. #7
    sanfra non è in linea Scolaretto
    Post
    373
    Proverò a fare una classe log,però prima volevo capire in che modo potrebbe avere una forma questa classe.

    Allora creo la classe Log

    creo dei metodi che poi richiamo nei vari eventi dell'appicazione web?

    qualcose del genere:

    codice:
    class Log{
    
    public errormessage="";
    
    public bool messaggidierrore(string testo){
    
    //dove il parametro testo sarebbe l'eccezione che si presenta;
    
    
    }
    
    }
    Speravo che non mi chiedessi qual'era l'errore di prima.
    Devi sapere che io sono in questo periodo stressatissimo, visto che sto lavorando a due progetti(da due mesi,quindi 12 ore al giorno) di cui uno in PHP (CMS) finito con ieri e l'altro questo dove grazie a te e anche al Forum sta per andare in porto.Cmq per tagliare corto l'errore era che sbagliavo il percorso del database e andavo a vedere l'altro database!

    Cmq ho impostato i lprogetto come hai detto tu con Parameter.Clear anche perchè mi sembra molto più ordinato e ho inserito nel web config tutte le connessioni e richiamte come tu mi hai consigliato e devo dire che è molto più fluido il codice!

  8. #8
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...ciao...rispondo velocemente alla tua domanda(sempre se serve ancora)...la tua classe Log dovrebbe prevedere come minimo la scrittura dell'eventuale errore in un file log(qui spetta te vedere cosa gestire o cosa riesci a gestire), quindi usare i metodi del namespace System.IO per scrivere su file....

  9. #9
    sanfra non è in linea Scolaretto
    Post
    373
    OK grazie, avevo già impostato qualcosa del genere grazie del tuo prezioso e indscutibile aiuto

    Alla prossima!

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi