Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

Îåêßíçóå áðü ôï ìÝëïò fpicha. Τελευταία δημοσίευση από το μέλος fpicha στις 23-07-2009, 10:36. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  13-07-2009, 11:46 52420

    Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    Γεια σας,
    εχω μια εφαρμογή (.NET 3.5 VB) η οποια σε ενα σημειο κανει ερωτημα στη βαση (Oracle 10g). Το περιεργο ειναι οτι καποιες φορες το ερωτημα φερνει αποτελεσματα κανονικα ενω τις περισσοτερες εχει σαν αποτελεσμα να παγωσει η εφαρμογή. Δηλαδή, μόλις τρέξει το myCommand. Execute(), δεν προχωραει στην επομενη γραμμη του κωδικα στον server ουτε επιστρεφει σφαλμα (ειναι μεσα σε Try/catch) αλλα επιστρεφει στον client χωρις κανενα μηνυμα και βεβαια χωρις αποτελεσματα. Εχω δοκιμασει να τρεξω το query με OracleDataAdapter.ExecuteReader() αλλα και (ADO) Command.Execute() αλλάζοντας το commandTimeout σε 120'' χωρις κανενα αποτελεσμα. Το πιο περιεργο ειναι οτι καποιες φορες (και μαλλιστα πιο συχνα στον production server σε σχεση με τον development) το ερωτημα τρεχει και επιστρεφει αποτελεσματα κανονικα.

    Ποιο μπορει να ειναι το προβλημα σε αυτη την περιπτωση;

    Το συγκεκριμενο Table της βασης το ανοιγω καθε 15'' για να κανω αρκετες εγγραφες, οι οποιες περνουν γυρω στα 1,5'' για να ολοκληρωθουν. Μπορω να καταλαβω καποια στιγμη να κανω query και το table να ειναι κλειδωμενο για write, αλλα συνεχεια; Και γιατι δεν επιστρεφει μηνυμα λαθους σε αυτη την περιπτωση;

    Καθε βοηθεια ειναι καλοδεχτη.
    Ευχαριστω,
    Φανη


  •  16-07-2009, 17:36 52555 σε απάντηση της 52420

    Απ: Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    Έχω μπερδευτεί λίγο. Τελικά παγώνει η εφαρμογή ή όχι. Ή παγώνει για λίγο και μετά επιστρέφει στον client χωρίς κανένα μήνυμα; Και τι εννοείς client;

    Μπορείς να κάνεις paste λίγο κώδικα, που να συμπεριλαμβάνει και το try/catch;


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  17-07-2009, 12:50 52570 σε απάντηση της 52420

    Απ: Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    Wild Guess. Ανοίγεις το Connection. Το κλείνεις μετά ή κάθε φορά ανοίγεις μια σύνδεση χωρίς να κλείσεις την προηγούμενη. Χρησιμοποιείς using. Βέβαια χωρίς να μας δείξεις κώδικα μιλάμε τελείως υποθετικάSmile

    Manos
  •  20-07-2009, 07:33 52620 σε απάντηση της 52570

    Απ: Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    Dim myCon as new oracleCLient.OracleConnection("...")
    Dim AlertDs As new Dataset
    Dim DA as OracleDataAdapter
    DA = New OracleDataAdapter(mySql, myCon)

    Try
        DA.Fill(alertDS) ' Edw stamataei h ektelesh toy kwdika. Sto debug den kanei step katw apo ayth th grammh.
    catch ex as Exception
        Response.write("Error in DB) 'Den mpainei edw pote o kwdikas
    Finally
        DA.dispose()   'Oyte edw ftanei o kwdikas, ara ta connections menoyn anoixta
        myCon.close()
        myCon.dispose()
    End try


    Το sql statement ειναι σωστο. Δοκιμασα και με OracleDataReader και OracleCommand οπου τρεχω το myCommand.Prepare(), το οποιο εκτελειται κανονικα. Ειναι αλλωστε ενα απλο Select * from Table where Column1=1. Επιστρεφει πολλά rows (γυρω στα 2000-4000) αλλα δεν νομιζω οτι ειναι και υπερβολικα. Αλλωστε δοκιμασα να φερω μονο 10 εγγραφες και παλι απετυχε. Επισης, σταματησα το service που γραφει στον πινακα και παλι ειχα προβληματα. Αρα δεν ειναι θεματα Locking/concurrency.

    Ο κωδικας νομιζω ειναι απλος. Το ιδιο πραγμα κανω σε ολη την εφαρμογη με αλλα tables, χωρις προβλημα. Γιατι σε αυτο το table δεν παιζει, δεν ξερω. Επισης, να υπενθυμισω, οτι στον server, ο κωδικας αυτος τρεχει στην αρχη, αλλα μετα απο καποιες φορες που τρεχει τη συγκεκριμενη σελιδα, κολαει και εκει. Να δοκιμασω να κανω connection pooling με κωδικα για καλυτερα αποτελεσματα;


    *** Οταν λεω οτι δεν τρεχει, στο debug εξαφανιζεται ο κερσορας που κανει Step σε καθε γραμμη εντελως οταν φτασει στο συγκεκριμενο σημειο, οταν την τρεχω, στον browser δεν εμφανιζονται αποτελεσματα ουτε μηνυμα λαθους και μετα δεν δουλευει καμια επιλογη της εφαρμογης: δεν απανταει καθολου ο web server  και στο τελος "κρεμαει" και ο ιδιος.
  •  20-07-2009, 09:14 52621 σε απάντηση της 52620

    Απ: Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    Καταρχήν μπράβο για την λεπτομερή περιγραφή. Μια βελτίωση στον κώδικα, αν και δεν είναι αυτό το πρόβλημα. Βγάλε το finally με τα dispose και χρησιμοποιήσε using.

    Έτσι όπως τα περιγράφεις τα πράγματα δεν φαίνεται να υπάρχει πρόβλημα εδώ. Μήπως στο service; Βέβαια λες ότι όταν το κλείσεις πάλι το έχεις το πρόβλημα. Μήπως όμως τελικά δεν κλείνει;

    Και κάτι άλλο. Δεν είμαι expert στην oracle, αλλά ξέρω ότι η εντολή commit που πρέπει να εκτελεστεί για να ολοκληρωθεί ένα update, είναι ενεργοποιημένη by default στο connection. Μήπως την έχεις απενεργοποιήσει κάπου και δεν ολοκληρώνεται το update σου;


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  20-07-2009, 09:37 52622 σε απάντηση της 52620

    Απ: Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    fpicha:
    Dim myCon as new oracleCLient.OracleConnection("...")
    Dim AlertDs As new Dataset
    Dim DA as OracleDataAdapter
    DA = New OracleDataAdapter(mySql, myCon)

    Try
        DA.Fill(alertDS) ' Edw stamataei h ektelesh toy kwdika. Sto debug den kanei step katw apo ayth th grammh.
    catch ex as Exception
        Response.write("Error in DB) 'Den mpainei edw pote o kwdikas
    Finally
        DA.dispose()   'Oyte edw ftanei o kwdikas, ara ta connections menoyn anoixta
        myCon.close()
        myCon.dispose()
    End try


    Δεν βλέπω πουθενά το myCon.Open.Το έχεις βάλει???? Μπαίνει πριν από το Fill. Χρησιμοποίησε οπωσδήποτε και το using.

    Manos
  •  23-07-2009, 10:36 52728 σε απάντηση της 52621

    Απ: Ερώτημα στη βαση δεν επιστρεφει τιποτα (ουτε αποτελεσμα, ουτε λαθος!)

    Δεν ξερω αν ειναι προσωρινο, γιατι το δοκιμασα μολις 3-4 φορες, αλλα με το using φαινεται να δουλευει. Επιπλεον αφαιρεσα και καποιες στηλες απο το select που δεν χρειαζοτανε, κι ετσι μειωθηκε ο ογκος των αποτελεσματων.

    Ευχαριστω πολυ!!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems