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

 

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

Δυναμικό pass SQL με χρήση EXEC

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 31-05-2005, 08:36. Υπάρχουν 23 απαντήσεις.
Σελίδα 1 από 2 (24 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-05-2005, 15:14 2285

    Δυναμικό pass SQL με χρήση EXEC

    Γεια σας ανύσηχοι !!!!!
    Άλλη μια ερώτηση :

    Αν υποθέσουμε ότι θέλω να εκτελώ ένα πλήρως cutomized where clause που δημιουργείται δυναμικά από το GUI κάθε φορά η πρακτική να φτιάξω ένα stored procedure και να χρησιμοποιήσω το EXEC statement ενδείκνυται ?

    Π.Χ.

    CREATE PROCEDURE spTest
    @WhereClause nvarchar(50)
    AS
    EXEC('Select * From TableX ' + @WhereClause)
    GO

    Θέλω να πω να χρησιμοποιήσω procedure ή να το κάνω κατευθείαν pass στο Command object???




    Πάνος Αβραμίδης
  •  28-05-2005, 15:27 2286 σε απάντηση της 2285

    Re: Δυναμικό pass SQL με χρήση EXEC

    Η διαφόρά μεταξύ του να περάσεις το generated statement σου στο command object και του να εκτελέσεις ένα stored procedure που θα στο δημιουργεί, έγκειται στα εξής:

    - Αν το περάσεις στο command object, και ο SQL Server σου βρίσκεται αλλού (οχι στο μηχάνημα που τρέχει το GUI), αυτό συνεπάγεται οτι το statement κάθε φορά θα περνάει μέσα από το δίκτυο για να φτάσει στον προορισμό του. Αυτό, ανάλογα την κατάσταση, μπορεί να σε προβληματίσει από πολύ ως καθόλου (εξαρτάται από τη χρήση, τον όγκο του statement, το είδος της σύνδεσης μεταξύ sql server και μηχανημάτων που έχουν το GUI κλπ.)

    - Από την άλλη πλευρά, τα dynamic EXEC statements γίνονται recompile κάθε φορά που τρέχουν (μια και δεν μπορεί να αποθηκευθεί execution plan για αυτά - τα λέω σωστά pkanavos; θα το πάρω το 70-229 καμμια φορά; Smile ). Εκεί, είτε έτσι το κάνεις είτε αλλιώς ούτε κερδίζεις ούτε χάνεις τίποτα, μια και αν το περνάς στο command object θα έχεις (σχεδόν) το ίδιο effect.

    Αν ο πρώτος προβληματισμός που ανέφερα δεν σε αγγίζει υπό την έννοια οτι έχει ελάχιστη επίδραση στην απόδοση του συστήματος, τότε κριτήριο πιστεύω οτι είναι η καθαρότητα του κώδικά σου (ένα constructed query εντός του κώδικα απαιτεί recompile και γεμίζει τον κώδικα με strings και άλλα όμορφα, ενώ ένα dynamic statement στη βάση απαιτεί απλά editing μιας stored procedure σε περίπτωση αλλαγών - και πάλι εξαρτάται από το είδος της αλλαγής βέβαια το αν απαιτείται "μόνο" αυτό).

    Γενικά εγώ προτιμώ αν έχω δυναμικά WHERE clauses όπως αναφέρεις στο παράδειγμα, να χρησιμοποιώ stored procedures με EXEC statements. Προκύπτει λιγότερος κώδικας στα sources μου και είναι πιό εύκολη η αλλαγή του πράγματος όταν κάτι δεν πάει καλά, συν οτι δεν περνάνε τεράστια statements μέσα από το δίκτυο.

    Ισως θα σε βοηθούσε, αν βέβαια έχει σχέση με τη δική σου περίπτωση, ένα αρθράκι που είχα γράψει παλιότερα: Dynamic SQL Where clauses using conditional operators






    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  28-05-2005, 15:34 2287 σε απάντηση της 2286

    Re: Δυναμικό pass SQL με χρήση EXEC

    Thank you Σωτήρη,
    και εγώ προς τη μεριά του EXEC έγερνα σκεπτόμενος την επόμενη μέρα όπως αναφέρεις και εσύ με hardcoded statements ...

    Big SmileΕυχαριστώ πολύ για τις πληροφορίες Big Smile!!!


    Πάνος Αβραμίδης
  •  28-05-2005, 15:42 2288 σε απάντηση της 2287

    Re: Δυναμικό pass SQL με χρήση EXEC

    Αν και βέβαια θα μπορούσα να αποθηκεύσω το Select clause σε κάποιο INI file ...

    Πάνος Αβραμίδης
  •  28-05-2005, 15:51 2289 σε απάντηση της 2288

    Re: Δυναμικό pass SQL με χρήση EXEC

    Χμ, δεν θα το πρότεινα. Γενικά δεν είναι καλό να "ανοίγεις" κομμάτια του business/data layer σου σε ini αρχεία και άλλα τέτοια. Ειναι, πως να το πω....μη "πολιτικά ορθό" Smile

    Αν πρέπει όμως και επιβάλλεται να αποθηκεύσεις κάπου strings θα πρότεινα τις εξής εναλλακτικές (εξαρτάται και σε τι προγραμματίζεις - vb6 ή .net, web ή winforms):

    - Αποθήκευση σε resource (resx) αρχείο
    - Αποθήκευση στην ΙΔΙΑ τη database! Σε ένα πίνακα από όπου θα μπορείς να τα "τραβάς" και να τα ενώνεις με το generated WHERE clause σου (εχει κάποιο κόστος στην απόδοση, είναι όμως πιό ευέλικτο)
    - Αποθήκευση σε κάποιο module (mdl) αρχείο ως constants
    - Αποθήκευση (σε περίπτωση που δουλεύεις web) στο web.config
    - Αποθήκευση (σε περίπτωση που δουλεύεις web με asp 3.0) στο global.asa ή σε κάποιο include file

    Εγώ, για να είμαι πιό ευέλικτος, θα προτιμούσα (αν είχα και αρκετά statements) να τα αποθηκεύω στην ίδια τη βάση, να τα "τραβάω" με την εκκίνηση της εφαρμογής και να τα βάζω σε ένα collection ωστε να τα έχω πρόχειρα by key μετά οπουδήποτε.




    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  28-05-2005, 15:57 2290 σε απάντηση της 2288

    Re: Δυναμικό pass SQL με χρήση EXEC

    Επίσης,
    διάβασα το όντως ενδιαφέρον άρθρο αλλά στην περίπτωση μου τα columns με τα οποία φιλτράρω το resultset δεν είναι σταθερά ...

    Πάνος Αβραμίδης
  •  28-05-2005, 16:00 2291 σε απάντηση της 2289

    Re: Δυναμικό pass SQL με χρήση EXEC

     cap wrote:
    Εγώ, για να είμαι πιό ευέλικτος, θα προτιμούσα (αν είχα και αρκετά statements) να τα αποθηκεύω στην ίδια τη βάση, να τα "τραβάω" με την εκκίνηση της εφαρμογής και να τα βάζω σε ένα collection ωστε να τα έχω πρόχειρα by key μετά οπουδήποτε.


    Έχεις απόλυτο δίκιο σε αυτό και εμένα δεν μου αρέσει η ιδέα το business logic να είναι τόσο άμεσα προσβάσιμο ...

    Η παραπάνω σου λύση μου αρέσει !!!
    Πάνος Αβραμίδης
  •  28-05-2005, 19:07 2293 σε απάντηση της 2291

    Re: Δυναμικό pass SQL με χρήση EXEC

    Και μετά λέμε για το FAD! Ζει και βασιλεύει... Big Smile

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  29-05-2005, 11:19 2300 σε απάντηση της 2285

    Re: Δυναμικό pass SQL με χρήση EXEC

    FAD IS BAD Δάσκαλε????
    Πάνος Αβραμίδης
  •  29-05-2005, 12:40 2305 σε απάντηση της 2300

    Re: Δυναμικό pass SQL με χρήση EXEC

     axaros wrote:
    FAD IS BAD Δάσκαλε????


    Στην Ελλάδα είναι τρόπος ζωής. Οπότε μην αγχώνεσαι και πολύ. Το θέμα είναι να υπάρχει έλεγχος που είναι η εφαρμογή και που το patchwork.

    Εδώ πλέον μιλάμε για enteriprise layer στο patchwork και ενσωμάτωση των άλλων layers μέσα σε αυτό... Smile
     
    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  29-05-2005, 12:50 2306 σε απάντηση της 2300

    Re: Δυναμικό pass SQL με χρήση EXEC

    FAD-ξεFAD πάντως, αν ακολουθείς τέτοιες λύσεις χρειάζεται τεράστια προσοχή στην κατασκευή του SQL statement, ιδιαίτερα αν τμήματά του είναι user input από text boxes κλπ, γιατί κινδυνεύεις από το συντακτικά λάθη στο statement ώς SQL injection attacks...


    Vir prudens non contra ventum mingit
  •  29-05-2005, 14:22 2308 σε απάντηση της 2306

    Re: Δυναμικό pass SQL με χρήση EXEC

    Το ξέρω το ξέρω Μάνο ...
    Στη συγκεκριμένη περίπτωση το πράγμα είναι εύκολα διαχειρίσιμο αφού το WHERE χτίζεται με βάση τα checked nodes ενός tree control ...


    Πάνος Αβραμίδης
  •  29-05-2005, 14:26 2309 σε απάντηση της 2306

    Re: Δυναμικό pass SQL με χρήση EXEC

     KelMan wrote:
     ώς SQL injection attacks...

    Στο προηγούμενο Post αναφερόμουνα στο πρώτο σκέλος της απάντησης για το δεύτερο όντως τι κάνει κανείς ???
    Υπάρχει σωτηρία???
    Πάνος Αβραμίδης
  •  29-05-2005, 14:44 2310 σε απάντηση της 2305

    Re: Δυναμικό pass SQL με χρήση EXEC

     gcapnias wrote:

    Στην Ελλάδα είναι τρόπος ζωής. Οπότε μην αγχώνεσαι και πολύ. Το θέμα είναι να υπάρχει έλεγχος που είναι η εφαρμογή και που το patchwork.

    Εδώ πλέον μιλάμε για enteriprise layer στο patchwork και ενσωμάτωση των άλλων layers μέσα σε αυτό... Smile
     
    George J.



    Εχμ. Εδώ στο Ελλάντα, οπου ο πελάτης δεν γνωρίζει τι θέλει, και ο προγραμματιστής / αναλυτής / project manager δεν βοηθάει ούτε αυτόν που παραγγέλνει το λογισμικό αλλα ούτε και αυτόν που το φτιάχνει, σπάνιες είναι οι περιπτώσεις που με σωστό design θα πας "μπροστά"...

    Ενας από τους λόγους είναι οτι τελικά ο πελάτης (ειδικά όταν πρόκειται για μεγάλους οργανισμούς) δίνει περισσότερο βάση στο ΠΟΤΕ θα παραδοθεί το πράγμα παρά στο ΠΩΣ θα κάνει αυτά που κάνει. Αρκετές φορές αγνοεί τελείως τα performance metrics, άλλες φορές δεν δίνει δεκάρα για το user interface (μεγααααλο κεφαλαιο αυτό - οι περισσότεροι πάνε με τις προδιαγραφές αδιαφορώντας αν το user interface μπορεί να δουλευτεί από χρήστες με IQ μικρότερο από αυτό της Sharon Stone - μην κοροιδεύετε, είναι μέλος της MENSA!) και άλλες φορές σφυράει αδιάφορα ως προς το extensibility...ετσι, η σύγχρονη δημιουργία λογισμικού στην Ελλάδα μεταφράζεται ως "παρε τα λεφτά και τρέχα", ενώ για refactoring ούτε λόγος...το refactouring Smile ζει και βασιλεύει. Smile


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  29-05-2005, 15:31 2311 σε απάντηση της 2310

    Re: Δυναμικό pass SQL με χρήση EXEC

    Αν σου πω ότι για το συγκεκριμένο project περιέγραψες την κατάσταση που βρίσκομαι με μία αλλαγή στον τίτλο 'για λεφτά έχει ο Θεός , τρέχα ...'
    Για την ακρίβεια αύριο πρέπει να το δώσω ...

    Θέλετε να μιλήσουμε για extensibility όταν ακόμη και το testing θα γίνει on site κατ' απαίτηση των ειδημόνων εμπορικών λαμόγιων ;

    Πάνος Αβραμίδης
Σελίδα 1 από 2 (24 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems