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

 

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

εναλλακτική του SQLCommandBuilder?

Îåêßíçóå áðü ôï ìÝëïò Johnnyxp64. Τελευταία δημοσίευση από το μέλος Johnnyxp64 στις 06-05-2011, 15:30. Υπάρχουν 16 απαντήσεις.
Σελίδα 1 από 2 (17 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  05-05-2011, 19:07 65578

    εναλλακτική του SQLCommandBuilder?

    hi all

    ως τωρα κανω χρηση sqlcommandbuilder  για να μπορω να ενημερωνω πισω στην βαση αλλαγες που εγιναν σε ενα datatable.
    ο commandbuilder μεσω του "select" ερωτηματος παραγει τα υπολοιπα queries (update,delete etc) ως γνωστον αυτοματα. ομως αν το ερωτημα εχει innerjoin και το datatable πεδια απο περισσοτερους απο ενα πινακα δεν μπορει να γραψει πισω στην βαση. Θελω μια ενναλακτική για αυτο παρακαλω.






    εχω ενα core γραμμενο που κανει χρηση sqlcommandbuilder για να μπορει απο ενα SELECT query να φτιαξει τα υπολοιπα (update/insert/delete) και να κανει ευκολα μια ενημερωση ενος datatable.
    η αναγκες της εφαρμογής ειναι πολυ μικρες και το λεω για να μην μπουμε στο τρυπακι ο quirebuilder ειναι λιγο αργος, δεν εχουμε πληρη ελεγχο στα ερωτηματα που παραγει κτλ κτλ.

    την δουλεια του την κανει πολυ γρηγορα και οκ, μα εχει ενα μεγαλο μειωνεκτιμα

    ειναι αχριστος οταν στο select ερωτημα εχουμε inner join με αλλα tables. δεν μπορεί να ενημερώνει πανω από ενα πίνακα.

    θα ήθελα απο την ποιο "τσαπατσουλιά"* λύση μεχρι και την ποιο επιστημονική να ακούσω για εναλλακτικές ή workarrounds, Big Smile
    XPO? και αν ναι πως?

    να σας δωσω και το τι θελω να κανω ωστε να εχεται καλητερη εικονα, ισως προτεινεται κατι αλλο.
    εφαρμογη σε vb.net 2008 .net 3.5 sp1

    θελουμε μια φορμα που ο admin χρηστης θα "πετα" ενα sql select ερωτημα που εχει ετοιμασει και αυτο οσο συνθετο και αν ειναι θα του επιστρεφει δεδομένα (datatable, xpo persistant object class, θα ναι δεν ξερω οτι να ναι) αρεκει να ειναι ολα παντα σε runtime, και τα αποτελεσματα αυτα τα περνω σε ενα xtragrid τα αλλαζω και αποθηκευω πισω Αμεσω χωρίς να εχω γραψει ουτε άλλο query ουτε να εχω κωδικα για αυτο, διοτι πολυ απλα ειναι κατι αρκετα δυναμικο. ολα αυτα τωρα τα εχω και παιζουν ΑΨΟΓΑ, αλλα μεχρι ενα datatable και ερωτηματα που δεν εχουν μεσα τους inner joins.

    θελω τα φωτα σας

    ευχαριστω.



    *το τονιζω αυτο διοτι δεν προκειτε να εχω χρονο 1μηνα ουτε θα πληρωθω για αυτο εξτρα, οποτε οσο λιγοτερο "κοπιασω" τοσο το καλητερο. δεν ειναι καν νεο εργο. αλλα θα αντικατασταθει πολυ αργοτερα.

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  05-05-2011, 19:17 65579 σε απάντηση της 65578

    Απ: εναλλακτική του SQLCommandBuilder?

    Καλό θα είναι να ξαναγράψεις την ερώτηση πιο συνοπτικά (2 γραμμές σύνολο είναι καλές) καθώς είναι πολύ δύσκολο να καταλάβει κανείς τί θες - ειδικά όταν μία πρόταση καταλήγει να είναι ολόκληρη παράγραφος.



    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  05-05-2011, 21:06 65582 σε απάντηση της 65579

    Απ: εναλλακτική του SQLCommandBuilder?

    νομιζω οτι ειναι αρκετα ξεκαθαρη απο τον τιτλο της.
    ηθελα να προλαβω του μελλοντικους διαλογους και τα εγραψα ολα, αμα εγραφα 2 γραμμες θα λεγατε δεν μας λες τι θες να κανεις και δεν λεω λεπτομερειες....ε τι ναπω



    οριστε 3 γραμμες. Stick out tongue

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  05-05-2011, 21:27 65583 σε απάντηση της 65582

    Απ: εναλλακτική του SQLCommandBuilder?

    Δεν ξέρω αν θα βρεις κάτι που να κάνει αυτόματα αυτό που περιγράφεις, γιατί δεν είναι και τόσο απλό. Για παράδειγμα, έχεις ένα view με δύο tables και διαγράφεις όλες τις children εγγραφές. Η parent εγγραφή να σβηστεί ή όχι; Στο interface, το μόνο που θα βλέπεις είναι τα "combined" rows να διαγράφονται στο grid, αλλά όταν πας ν' αποθηκεύσεις στη βάση, τι θα γίνει τελικά με την parent; Καλού - κακού, ρίξε μια ματιά στους Instead Of triggers, για να σχεδιάσεις updatable views. Βέβαια, αυτή η προσέγγιση αποκλείει το dynamic generation.

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  05-05-2011, 22:42 65585 σε απάντηση της 65578

    Απ: εναλλακτική του SQLCommandBuilder?

    Δεν έχω φτιάξει ποτέ κάτι τέτοιο αλλά αν ήταν να φτιάξω θα κοιτούσα και προς την GetSchemaTable και κυρίως για queries που φτιάχνονται δυναμικά από τον χρήστη μέσα σε ένα TextBox για παράδειγμα.

    Η Function αυτή σου γυρίζει ένα DataTable με πληροφορίες για τις στήλες που περιέχει ο SQLDataReader. Το όνομα του Alias του column αν έχει χρησιμοποιηθεί, το όνομα του column στην βάση, σε ποιον πίνακα στην βάση ανήκει, τι τύπος είναι, τι μέγεθος έχει κτλ.

    Ίσως με την έρευνα που έχεις κάνει επάνω στο πρόβλημα να σου φανεί χρήσιμη και αυτή η Function.

     

    Υστ: Θα πρέπει να ορίσεις το Command Behavior ανάλογα για να σου γεμίσει με πληροφορίες την GetSchemaTable.

  •  06-05-2011, 09:03 65586 σε απάντηση της 65585

    Απ: εναλλακτική του SQLCommandBuilder?

    btw Oracle 11g Database Embarrassed
    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  06-05-2011, 11:11 65587 σε απάντηση της 65586

    Απ: εναλλακτική του SQLCommandBuilder?

    Johnnyxp64:
    btw Oracle 11g Database Embarrassed


    Δεν αλλάζει κάτι. Και για την Oracle τα ίδια ισχύουν...

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  06-05-2011, 11:23 65588 σε απάντηση της 65587

    Απ: εναλλακτική του SQLCommandBuilder?

    Markos:
    Johnnyxp64:
    btw Oracle 11g Database Embarrassed


    Δεν αλλάζει κάτι. Και για την Oracle τα ίδια ισχύουν...

    Marko αν καταλαβαινω σωστα τα trigger παλι καποιος πρεπει να τα γραψει απο το 0 και μαλιστα πανω στην βαση? η μεσα απο καποιο UI της εφαρμωγης να τα φτιαχνει και να τα τρεχει?
    σκοπος ειναι να μην γραφουμε τιποτα πραπανω απο το select query που θα μας δοθει, γι ανα γραφουμε τα δεδομενα πισω στην βαση..

    οσο για την αλλη function που ειπe ο φιλος παραπανω, θα την κοιταξω να δω αν μπορω με της πληροφοριες αυτες να κανω κανα δικο μου custom script engine generator και να αφιερωσω χρονο μια φορα σε αυτο και απο εκει και περα να ειναι αυτοματα ολα..... 
    αν οντος δεν υπαρχει κατι τετοιο στην αγορα ισως να το βγαλω δεν ξερεις καμια φορα....Wink

    περημενω να δω και αλλες πρωτασεις σας και να ψαχτω....

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  06-05-2011, 11:37 65589 σε απάντηση της 65588

    Απ: εναλλακτική του SQLCommandBuilder?

    Γιάννη, προσπαθώ να σου εξηγήσω ότι το να δημιουργήσεις δυναμικά Insert, Update και Delete queries για ένα οποιοδήποτε αυθαίρετο Select statement είναι υπερβολικά δύσκολο και μπορεί ν' αποδειχτεί και εξαιρετικά επικίνδυνο. Ακόμα κι αν βρεις κάποιο component που θα χρησιμοποιήσεις σαν black box για να κάνεις αυτό που θέλεις, κάποια στιγμή μπορεί να παράγει ένα statement που "θ' αλλάξει τα φώτα" στα δεδομένα! Σε περίεργα joins ή/και subqueries, υπάρχουν πολλοί τρόποι να στείλεις αλλαγές στη βάση, με τον καθένα από αυτούς να παράγει και διαφορετικό αποτέλεσμα. Οι πελάτες σου μπορεί να αιφνιδιαστούν και αυτό σπανίως είναι ευχάριστο... Αν, τώρα, υπάρχει εκεί εκεί έξω κάτι καλό που δεν γνωρίζω, κι εγώ περιμένω να δω τι θα προτείνουν τα άλλα μέλη!

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  06-05-2011, 12:00 65590 σε απάντηση της 65589

    Απ: εναλλακτική του SQLCommandBuilder?

    Αυτό το "κάτι" λέγεται ORM: οποιοδήποτε ORM υποστηρίζει σχέσεις μεταξύ των κλάσεων μπορεί να φτιάξει τα κατάλληλα statements εκμεταλλευόμενο αυτά τα relations.

    Από ένα χύμα select είναι πολύ δύσκολο να το κάνεις αυτό επειδή δεν είναι ποτέ ξεκάθαρο ποιές είναι οι σχέσεις. Ένα join μπορεί να σημαίνει ότι δύο πίνακες συνδέονται άμεσα (π.χ. order και orderline) χωρίς όμως να φαίνεται ποιός είναι ο parent (που πρέπει να γίνει πρώτα insert/update, τελευταίος delete) και ποιός ο child (το αντίστροφο). Μπορεί πάλι η σύνδεση να γίνεται μέσω ενός many-to-many πίνακα, οπότε στην ουσία γίνονται join τρεις πίνακες, και είναι ο μεσαίος που πρέπει να πειραχτεί πρώτα κλπ, κλπ, κλπ.

    Johnny, αυτό που ζητάς λύθηκε οριστικά όταν εμφανίστηκαν τα ORMs. Πριν από αυτά, τον καιρό της VB6, μπορούσες να δώσεις ένα select statement σε ένα recordset και να δεις ποιοί πίνακες χρησιμοποιούνταν. Και πάλι όμως, εκτός και αν έκανες ανάλυση των foreign keys ή αν βασιζόσουν σε naming conventions, δεν μπορούσες να φτιάξεις τα statements με ασφάλεια. Αν βέβαια σχεδίαζες εσύ τη βάση φρόντιζες τα ονόματα να είναι τέτοια ώστε να καταλαβαίνεις τί γίνεται.

    Μετά, βγήκαν οι code generators οπότε από ένα μοντέλο με τα κατάλληλα στοιχεία (πίνακες, πεδία, parents, children, many-to-many) μπορούσες να φτιάξεις τους πίνακες, τα stored procedures και τον κώδικα που τα καλούσε με τη μία. Φυσικά, κάθε φορά που άλλαζε το σχήμα της βάσης έπρεπε να ξανακάνεις generate τον κώδικα.

    Τέλος, ήρθαν τα ORM τα οποία ουσιαστικά κάνουν τη δουλειά του generator στο runtime και εσύ φροντίζεις μόνο να είναι σωστό το μοντέλο σου.

    Αυτό που ΠΟΤΕ δεν έπαιξε σοβαρά ήταν ο SqlCommandBuilder. Όποιος χρησιμοποιούσε datasets δεν τον χρειαζόταν ενώ όποιος είχε πιο προχωρημένες ανάγκες που χρειάζονταν χύμα SQL δεν τον ήθελε γιατί το μόνο που μπορούσε να σου δώσει ήταν απλά-χαζά statements.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-05-2011, 12:39 65591 σε απάντηση της 65590

    Απ: εναλλακτική του SQLCommandBuilder?

    Παναγιωτη μπορεις σε παρακαλω να μου δωσεις ποιο "πρακτικές" λυσεις?

    δηλαδη ΟΚ το ORM αλλα πως να το εφαρμώσω σε μια εφαρμογή με .net 2?
    δηλαδη πρακτικα μπορεις να μου πεις τι να κανω? μιλας αν καταλαβα σωστα για EF φαση και XPO τυπου προσέγγιση? γιατι να κανω hardcoded datasets kai designers kai adapters δεν παιζει, θελω κατι ποιο source code independable. όσο μπορεί τουλάχιστον.Sad

    πως να δημιουργησω ενα μοντελο ORM της βασης στην εφαρμογή αυτη και μετα δυναμικα πως να περνω δεδομενα με διαφορους συνδιασμους-relations που θελω και μετα αυτοματα ο υπαρχων μηχανισμος αναλαμβανει να τα γραψει πισω? 

    • τι κάνουμε αν η βαση αλλάζει? πρεπει να ανοιγω κωδικα να ενημερωνω το μοντελο μου ωστε να παιζει σωστα?
    • ακόμα τι παιζει αμα στην βαση δεν εχουμε ολα τα σωστα relations, και απλα ειναι relations στο χαρτι οχι πανω στην βαση? εκει πως θα παιζει η φαση ORM?

    σορρυ αν ειναι noobistikes οι ερωτησεις αλλα πολλα απο αυτα μπορει να τα κανω ηδη και να μην γνωριζω τις σωστες ορολογιες (τα κακα του try first read the manual later βλεπεις) ή να μου ειναι νεα.Embarrassed

    σας ευχαριστω ολους ως τωρα θερμαGeeked



    υ.γ μιλαμε για μια εφαρμωγη που καποτε ηταν σε vb6 μετα κάποιοι τη έγραψαν σε .net 2 και η βαση εχει σχεδιασμο πολυ χαλια γιατι τα δεδομενα τα πηρα απο παλια Dos εφαρμωγη που εγγραφε σε αρχεια! οτι να ναι οπου ναναι! λιγα relationships κι ονομασιες 8char το πολυ.
    και τωρα πρεπει να βγαλω "καπως" το φιδι απο την τρύπα χωρις να πω "πεταξτε την και παμε απο την αρχη"Angry

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  06-05-2011, 14:28 65592 σε απάντηση της 65578

    Απ: εναλλακτική του SQLCommandBuilder?

    Johnnyxp64:

    θελουμε μια φορμα που ο admin χρηστης θα "πετα" ενα sql select ερωτημα που εχει ετοιμασει και αυτο οσο συνθετο και αν ειναι θα του επιστρεφει δεδομένα (datatable, xpo persistant object class, θα ναι δεν ξερω οτι να ναι) αρεκει να ειναι ολα παντα σε runtime, και τα αποτελεσματα αυτα τα περνω σε ενα xtragrid τα αλλαζω και αποθηκευω πισω Αμεσω χωρίς να εχω γραψει ουτε άλλο query ουτε να εχω κωδικα για αυτο, διοτι πολυ απλα ειναι κατι αρκετα δυναμικο.

    Μα... πως θα σε βοηθήσει το ORM αν θες να "πετάς" σε μία φόρμα ένα αυθαίρετο Select ερώτημα και ταυτόχρονα να παίρνεις updatable αποτέλεσμα; Δε θα χρειαστείς ένα SQL to Entity Sql Converter ας πούμε;

    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  06-05-2011, 14:33 65593 σε απάντηση της 65592

    Απ: εναλλακτική του SQLCommandBuilder?

    αυτή η ερώτηση δεν απευθύνεται σε μένα φαντάζομαι...?

    αλλα με ORM δεν χρεαζεται να πετας ενα ερωτημα select αλλα φταχνεις κατι σαν query buildr visual designer και λες τι δεδομενα θες να δεις σαν αυτο φανταζομαι:
    i dont know

    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  06-05-2011, 14:48 65594 σε απάντηση της 65592

    Απ: εναλλακτική του SQLCommandBuilder?

    Το ερώτημα δεν είναι "πως πετάω ένα αυθαίρετο select". Πολύ απλά, δεν υπάρχει καμμία εφαρμογή η οποία να έχει αυτή την απαίτηση, εκτός και αν μιλάμε για το πως να φτιάξουμε ένα δικό μας code generator.  Μπορεί ο Johnny να έχει κάτι στο μυαλό του, π.χ. να θέλει η εφαρμογή του να κάνει updates με τη σωστή σειρά χωρίς να γράψει τα statements με το χέρι, και να νομίζει ότι θα πρέπει να φτιάξει αυτός το sql statement με κάποιο τρόπο.  Με ένα ORM όμως, όπως το XPO, το Entity Framework ή το NHibernate, του δίνεις το μοντέλο και αναλαμβάνει αυτό να σου φτιάξει τα statements.

    Υ.Γ. Μιας και λέμε για XPO, αφού το XPO ΗΔΗ σου κάνει generate το μοντέλο από τη βάση, γιατί ψάχνεις παραπέρα? Ή μήπως προσπαθείς να φτιάξεις το "δικό σου" XPO? Σε αυτή την περίπτωση κοίτα τον κώδικα του NHibernate, τόσο το κομμάτι που "διαβάζει" το σχήμα της βάσης όσο και το κομμάτι που δημιουργεί statements από το μοντέλο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-05-2011, 14:52 65601 σε απάντηση της 65594

    Απ: εναλλακτική του SQLCommandBuilder?

    Τώρα ξεκαθάρισε!! Γιατί η αρχική "προδιαγραφή", εδώ που τα λέμε, ήταν... εξωτική!

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