<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.dotnetzone.gr:443/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>ADO.NET</title><link>https://www.dotnetzone.gr:443/cs/forums/78/ShowForum.aspx</link><description>Θέματα σχετικά με την προσπέλαση δεδομένων μέσω του ADO.NET και του System.Data namespace</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36276.aspx</link><pubDate>Mon, 15 Oct 2007 15:57:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36276</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36276.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36276</wfw:commentRss><description>&lt;P&gt;Ορίστε... Λείπεις το ΣΚ και χάνεις τις καλές συζητήσεις...&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Thiseas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Η αλήθεια όμως είναι οτι εξακολουθώ να μην βρίσκω άμεση σύνδεση με το πρόβλημα που έχω τώρα....&lt;BR&gt;Είναι, ας πούμε, μια προτροπή να αλλάξω τρόπο υλοποίησης? Πες οτι αυτό δεν γίνεται... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Έχεις διάφορες λύσεις. Από αυτή που προτείνει στο άρθρο του ο William Vaugn μέχρι να χρησιμοποιήσεις ένα ORM και να μην ασχοληθείς καθόλου (ίσως λίγο) με τον data access κώδικα. Στο ενδιάμεσο, αν επιμένεις να δουλέψεις με DataSets, τότε εδώ και πάλι έχεις λύσεις. Ίσως να μπορείς να χρησιμοποιήσεις updatable views αν αυτό που ζητάς είναι σε ένα DataTable να βλέπεις lookup πεδία από τα master tables. Ωστόσο, δεν βλέπω τον λόγο να μην δουλέψεις με ξεχωριστά DataTables τα οποία θα έχουν DataRelations μεταξύ τους.&lt;/P&gt;
&lt;P&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;Thiseas:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Θα μου επιτρέψεις να διαφωνήσω εδώ....&lt;BR&gt;Η Borland το έχει υλοποιήσει αυτό στα client-datasets που λειτουργούν σε disconnected mode και μπορεί και η MS κάλιστα να το κάνει... (νομίζω)... &lt;BR&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;/P&gt;
&lt;P&gt;Φεύ... Έχω να δουλέψω με Delphi από την εποχή της έκδοσης 3...&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36212.aspx</link><pubDate>Fri, 12 Oct 2007 23:55:27 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36212</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36212.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36212</wfw:commentRss><description>&lt;P&gt;Γκουχ, η αλήθεια είναι οτι ίσως έφυγα λίγο off-topic. Δεν το σύνδεσα με το αρχικό θέμα, απλά προσπάθησα να εξηγήσω τι σημαίνει disconnected model γιατί είδα οτι ενδέχετο να υπάρχει παρανόηση.&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36211.aspx</link><pubDate>Fri, 12 Oct 2007 23:53:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36211</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36211.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36211</wfw:commentRss><description>Κατανοητό και αποδεκτό Σωτήρη... (βλέπε clientdatasets πιο πάνω)... και όντως διαφορετικό από το Isolation και State.&lt;br&gt;Μιλήσαμε!&amp;nbsp; &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;br&gt;&lt;br&gt;Η αλήθεια όμως είναι οτι εξακολουθώ να μην βρίσκω άμεση σύνδεση με το πρόβλημα που έχω τώρα....&lt;br&gt;
Είναι, ας πούμε, μια προτροπή να αλλάξω τρόπο υλοποίησης? Πες οτι αυτό δεν γίνεται... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;br&gt;
&lt;br&gt;&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;KelMan:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Επιπρόσθετα, να σου πω Thiseas ότι αυτό που
περιγράφεις, υποστηρίζεται από το engine της Borland (αλλά και από το
παλιό ADO της Microsoft) για έναν και μόνο λόγο. Αυτά τα engines
δουλεύουν σε connected mode.....&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;br&gt;Θα μου επιτρέψεις να διαφωνήσω εδώ....&lt;br&gt;Η Borland το έχει υλοποιήσει αυτό στα client-datasets που λειτουργούν σε disconnected mode και μπορεί και η MS κάλιστα να το κάνει... (νομίζω)... &lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36210.aspx</link><pubDate>Fri, 12 Oct 2007 23:37:57 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36210</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36210.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36210</wfw:commentRss><description>&lt;P&gt;Η παράθεσή σου έρχεται από document για το Mono και ο συγγραφέας μιλάει για "mode" κάπως αυθαίρετα. Εγώ μιλάω για το disconnected model. &lt;/P&gt;
&lt;P&gt;Από το Intro to Datasets (MSDN): &lt;A href="http://msdn2.microsoft.com/en-us/library/8bw9ksd6(vs.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/8bw9ksd6(vs.80).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Datasets are objects that contain data tables where you can temporarily store the data for use in your application. If your application requires working with data, you can load the data into a dataset, which provides your application with a local in-memory cache of the data to work with. You can work with the data in a dataset even if your application becomes disconnected from the database. The dataset maintains information about changes to its data so updates can be tracked and sent back to the database when your application becomes reconnected.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Και πιό ξεκάθαρο είναι στο αντίστοιχο document για το .NET 1.1: &lt;A href="http://msdn2.microsoft.com/en-us/library/8bw9ksd6(vs.71).aspx"&gt;http://msdn2.microsoft.com/en-us/library/8bw9ksd6(vs.71).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Datasets store data in a disconnected cache. The structure of a dataset is similar to that of a relational database; it exposes a hierarchical object model of tables, rows, and columns. In addition, it contains constraints and relationships defined for the dataset.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Το disconnected modeL πρεσβεύει ακριβώς αυτό: Παρε τα data σου, ρίξε το connection και όταν ξανασυνδεθείς βλέπουμε. Ολα τα υπόλοιπα που αναφέρεις απευθύνονται σε άλλα aspects. Φυσικά δεν χρειάζεται να πω οτι ό,τι αναφέρεται σαν "connected mode" στο document για το mono ακολουθεί στην πραγματικότητα το disconnected model, γι'αυτό και μου τράβηξε την προσοχή!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36209.aspx</link><pubDate>Fri, 12 Oct 2007 23:20:33 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36209</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36209.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36209</wfw:commentRss><description>Α!!&lt;br&gt;Μήπως εννοείτε αυτό?: &lt;b&gt;&lt;a href="http://www.mono-project.com/Writing_Connected_Mode_Testcases"&gt;http://www.mono-project.com/Writing_Connected_Mode_Testcases&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;/b&gt;Αν εννοείτε τον εσωτερικό διαχωρισμό των modes των κλάσεων του ADO.NET&lt;br&gt;...τότε
φοβάμαι οτι έχουμε ξεφύγει από το αρχικό post και δεν μιλάμε για το
ίδιο θέμα... μιας και δεν μιλάω καν για in-memory data processing (που
αφορούν το dissconected mode)...&lt;br&gt;&lt;br&gt;Επίσης πρέπει να πω οτι το ADO.NET δεν "λειτουργεί" μόνο σε Disconnected Mode.... Πως θα μπορούσε άλλοστε... &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-42.gif" alt="Confused" /&gt;&lt;br&gt;Το Dataset λειτουργεί μόνο σε Connected State Mode.... και είναι αυτό που χρησιμοποιώ στο παράδειγμα μου...&lt;br&gt;
&lt;br&gt;Παράθεση:&lt;b&gt;&lt;br&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;ADO.NET:&lt;br&gt;Few of the classes which constitute the connected mode behavior are given below.
&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt; DataSet
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataTable
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataRow
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataColumn
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataRelation
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataView
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataAdapter
&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;The disconnected mode behavior is provided by the specific provider classes derived from the following common base classes.
&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt; Connection
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; Command
&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt; DataReader
&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36203.aspx</link><pubDate>Fri, 12 Oct 2007 22:01:19 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36203</guid><dc:creator>cap</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36203.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36203</wfw:commentRss><description>&lt;P&gt;Αλλο πράγμα το isolation mode και άλλο το connected/disconnected model (και όχι mode).&lt;/P&gt;
&lt;P&gt;Αυτό που πρεσβεύει το disconnected model είναι το εξής: Συνδέομαι - κάνω τη δουλειά μου - αποσυνδέομαι. Ετσι λοιπον για να δω π.χ. μια καρτέλα ενός πελάτη και για να τροποποιήσω κάτι σε αυτή γίνονται οι εξής κινήσεις:&lt;/P&gt;
&lt;P&gt;1. Συνδέομαι-τραβάω δεδομένα-αποσυνδέομαι.&lt;/P&gt;
&lt;P&gt;2. Εμφανίζεται η καρτέλα του πελάτη, κάνω τις αλλαγές μου, και πατάω οκ.&lt;/P&gt;
&lt;P&gt;3. Συνδέομαι-καταχωρώ τα δεδομένα-αποσυνδέομαι.&lt;/P&gt;
&lt;P&gt;Καθ'όλη τη διάρκεια του (2) δεν γνωρίζω τι άλλο έχει γινει σε αυτό το συγκεκριμένο πελάτη και από ποιόν, ούτε καν αν έχει η δεν έχει γίνει κάτι. Ο συγκεκριμένος πελάτης μπορεί μέχρι και να έχει διαγραφεί! Επισης το "συνδέομαι" και "αποσυνδέομαι" είναι εσωτερικές διεργασίες του μοντέλου και δεν έχει να κάνει με το αν εμείς έχουμε reference σε κάποιο connection.&lt;/P&gt;
&lt;P&gt;Ετσι λοιπόν αποκτά άλλο νόημα ο όρος "conflict resolution" στα πλαίσια αυτού του μοντέλου. Το connected μοντέλο, αντίστοιχα, θα βρισκόταν συνδεδεμένο καθ'όλη τη διάρκεια της διεργασίας, έτσι θα μπορούσε πολύ ευκολότερα να καταλάβει τι έχει γίνει όση ώρα εμείς βρισκόμασταν στο βήμα (2).&lt;/P&gt;
&lt;P&gt;Μανο διόρθωσέ με αν δεν τα είπα καλά κάπου.&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36201.aspx</link><pubDate>Fri, 12 Oct 2007 21:51:04 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36201</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36201.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36201</wfw:commentRss><description>Θα πρέπει να πω οτι δεν καταλαβαίνω τι εννοείς ακριβώς λέγοντας connected mode....&lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-10.gif" alt="Embarrassed" /&gt;&lt;br&gt;Είναι κάποιο definition που δεν γνωρίζω...? οπότε δεν μπορώ να καταλάβω καλά τι έχεις στο μυαλό σου λέγοντας αυτό....&lt;br&gt;
Μήπως εννοείς το statless level του internet? Αν ναι, εγώ δεν μιλάω για τέτοια εφαρμογή, αλλά μια C/S σε ένα LAN.&lt;br&gt;&lt;br&gt;Μήπως εννοείς το isolation level...? αυτό δεν έχει να κάνει με το ADO ή το BDE ...Κλπ κλπ&lt;br&gt;&lt;br&gt;Συμφωνώ με το Conflict Resolution. Πρέπει να πω όμως οτι έτσι που το θέτεις μοιάζει να είναι κάτι νεό.... &lt;br&gt;Το Conflict Resolution είναι πάρα πολύ παλιό θέμα και δεν είναι μόνο θέμα του ADO, της νέας υλοποίησης, προσέγγισης, τεχνολογίας όπως θες πες το. Να σου θυμίσω (χαριτολογόντας) οτι όλοι χροοονια ψάχνουμε αυτόν τον "Another User" που συνέχεια κάνει change το row όσο εγώ κάνω αλλαγές.... βλέπε &lt;b&gt;isolation level: Commited Read&lt;/b&gt; &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;br&gt;&lt;br&gt;Τα Client Datasets, τα ApplyUpdates σε Remote Datamodules (ορολογία Borland) κλπ κλπ υποστηρίζονται πάνω απο 10 χρόνια.&lt;br&gt;&lt;br&gt;To πόσο είναι κάτι δεδομένο από τη στιγμή που διάβασες τα data μέχρι τη στιγμή που "αποφάσισες" να τα αλλάξεις δεν θα έλεγα οτι είναι θέμα ADO ή BDE, αλλά θέμα του &lt;b&gt;Isolation Level&lt;/b&gt; που έχες επιλέξει.&lt;br&gt;Αν έχεις επιλέξει &lt;b&gt;Dirty Read&lt;/b&gt; (π.χ. Select * from Table1 with(nolock)  ) τότε αυτό που θα διαβάσεις δεν ξέρεις καν αν θα έχει γίνει commit, είτε δουλεύεις ADO είτε BDE είτε είτε είτε...&lt;br&gt;&lt;br&gt;&lt;br&gt;PS: Για να μην γίνει καμιά παρεξήγηση, μην νομίσει κάποιος οτι προσπαθώ να "περάσω" οτι η Borland έχει καλύτερη βιβλιοθήκη κλπ κλπ... άλλοστε αν πιστεύα 100% κάτι τέτοιο δεν θα είμουνα τώρα εδώ να κάνουμε αυτην την επικοδομιτική (πιστεύω) κουβέντα, ούτε θα σπαταλούσα τόσες ώρες για την τεχνολογία της MS.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36194.aspx</link><pubDate>Fri, 12 Oct 2007 19:31:08 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36194</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36194.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36194</wfw:commentRss><description>&lt;P&gt;Επιπρόσθετα, να σου πω Thiseas ότι αυτό που περιγράφεις, υποστηρίζεται από το engine της Borland (αλλά και από το παλιό ADO της Microsoft) για έναν και μόνο λόγο. Αυτά τα engines δουλεύουν σε connected mode. Συνδέονται στη βάση, τραβάνε τα data και κλειδώνουν, οπότε είναι πολύ εύκολο να καταλάβουν τι αλλαγές έχουν συμβεί και να περάσουν πίσω τις ενημερώσεις. Στο ADO.NET υπάρχει τεράστια διαφορά καθώς υπάρχει το disconnected μοντέλο που καθιστά πολύ δυσκολότερη αυτή τη δουλειά και η δυσκολία εντοπίζεται στο ότι πρέπει να κάνεις conflict resolution μιας και δεν είναι τίποτα δεδομένο για την κατάσταση των data από τη στιγμή που τα διάβασες μέχρι τη στιγμή που τα ενημερώνεις.&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36193.aspx</link><pubDate>Fri, 12 Oct 2007 19:10:30 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36193</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36193.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36193</wfw:commentRss><description>To 2003 που γράφτηκε αυτό το άρθρο *ίσως* (και πάλι με μεγάαααλη επιφύλαξη) ήταν μια καλή&amp;nbsp;λύση η&amp;nbsp;one-size-fits-all stored procedure. Σήμερα, με όλα αυτά τα frameworks και τα ORMs που κυκλοφορούν, &amp;nbsp;δεν θα το έκανα με τίποτα...</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36189.aspx</link><pubDate>Fri, 12 Oct 2007 17:40:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36189</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36189.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36189</wfw:commentRss><description>Ψάχνοντας βρήκαμε ένα πολύ ενδιαφέρον άρθρο για το θέμα:&lt;a href="http://msdn2.microsoft.com/en-us/library/ms971491.aspx"&gt; http://msdn2.microsoft.com/en-us/library/ms971491.aspx&lt;/a&gt;&lt;br&gt;&lt;br&gt;Παραθέτω ένα μικρό απόσπασμα:&lt;br&gt;&lt;br&gt;&lt;b&gt;Okay, so it's tough to use the CommandBuilder when your SELECT
queries get a bit more complex. What can you use instead? Well, there
are lots of alternatives. What I've been doing lately is getting the
DACW to help. To start with, I usually use stored procedures to perform
both the SELECT and action queries. To setup a &lt;/b&gt;&lt;b&gt;Command object to execute a stored procedure, you set the &lt;/b&gt;&lt;b&gt;CommandText to the name of the stored procedure and the &lt;/b&gt;&lt;b&gt;CommandType to &lt;i&gt;CommandType.StoredProcedure&lt;/i&gt;—pretty much like ADOc.&lt;br&gt;&lt;/b&gt;&lt;br&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36181.aspx</link><pubDate>Fri, 12 Oct 2007 15:48:33 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36181</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36181.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36181</wfw:commentRss><description>&lt;P&gt;Και στο .NET υπάρχει λύση. Για παράδειγμα το LLBLGen Pro, όταν έχει μια ιεραρχία από objects (πχ Customer με property collection από Orders που το κάθε Order έχει property με collection από OrderItems) παράγει τα κατάλληλα SQL Queries για CRUD operations. Εσύ απλά λες Fetch ή Update και όλα τα υπόλοιπα τα κάνει μόνο του &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-1.gif" alt="Smile" /&gt; Από εκεί και πέρα, ο builtin ADO.NET&amp;nbsp;μηχανισμός δεν παρέχει&amp;nbsp;αυτή τη δυνατότητα αλλά έτσι κι αλλιώς ο CommandBuilder sucks big time καθώς ο κώδικας που παράγει είναι πολύ inefficient.&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36166.aspx</link><pubDate>Fri, 12 Oct 2007 05:40:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36166</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36166.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36166</wfw:commentRss><description>Thnx για τις απαντήσεις, αλλά η εφαρμογή που το κάνει αυτό που ψάχνω σε .Net υπάρχει ήδη σε Delphi και δουλεύει αρκετά χρόνια,... απλά πρέπει να το μεταφέρω ή άλλες φορές να το ξαναγράψω.... σε C#.&lt;br&gt;&lt;br&gt;Καλώς ή κακώς η λειτουργικότητα με τα "άγνωστα" SQL queries πρέπει να μείνει ως έχει για διάφορους λόγους.... απλά παραπονιέμαι λίγο γιατί η Borland (όπως ήδη είπα) το έχει κάνει ήδη....&lt;br&gt;&lt;br&gt;Tespa....&lt;br&gt;&lt;br&gt;Thnx 4 your time again...&lt;br&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36160.aspx</link><pubDate>Fri, 12 Oct 2007 04:50:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36160</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36160.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36160</wfw:commentRss><description>&lt;P&gt;Φοβάμαι ότι βλέπεις το πρόβλημα μονοδιάστατα! &lt;img src="http://www.dotnetzone.gr/cs/emoticons/emotion-4.gif" alt="Stick out tongue" /&gt;&lt;/P&gt;
&lt;P&gt;Όπως είπες και εσύ, το SQL δεν το ξέρεις παρά μόνο την στιγμή που θα&amp;nbsp;σχηματιστεί και θα ζητήσει να εκτελεστεί. Επειδή και να φτιάξεις ένα τέτοιο parser, την στιγμή που ένα ανθρώπινο μυαλό δεν θα μπορεί να&amp;nbsp;μαντέψει ακριβώς το κυρίως table&amp;nbsp;ενός query όπως θα το δει έτοιμο, πως θα μπορέσεις να υλοποιήσεις ένα parser να το κάνει; Δεν έχω ακούσει για έτοιμο τέτοιο parser - τέτοιας μορφής που να κάνει αυτή την δουλειά, και πιστεύω ότι θα είναι δύσκολο να υλοποιηθεί.&lt;/P&gt;
&lt;P&gt;Οπότε σε συνέχεια των σκέψεων του Παναγιώτη, θα συνέχιζα ότι αυτό που θα πρέπει να υλοποιηθεί, θα μπορούσε να γίνει με βάση το αποτέλεσμα του query - να μπορέσεις να ξεχωρίσεις τα πεδία και τα tables από το αποτέλεσμα που θα επιστρέψει το query.&lt;/P&gt;
&lt;P&gt;Μια δεύτερη λύση στο πρόβλημα, αντί να πάμε ένα βήμα μετά και να αναζητήσουμε στο αποτέλεσμα του query τη λύση στο πρόβλημά μας, να πάμε ένα βήμα πίσω, και αντί να συνθέσουμε το SQL μας με τον &lt;EM&gt;πατροπαράδοτο τρόπο&lt;/EM&gt; του concatenating, να σχηματίσουμε μια κλάση, που θα μπορεί με στοιχεία τα ονόματα των πεδίων των tables που θέλουμε να μας φτιάχνει το&amp;nbsp;επιθυμητό query, και αφού έχουμε μια μηχανή που θα φτιάχνει το SELECT&amp;nbsp;query μας, πόσο δύσκολο είναι να της δώσουμε και ένα hint&amp;nbsp;για το κύριο&amp;nbsp;table ώστε να μπορέσει με τα ίδια στοιχεία να φτιάξει και τα INSERT/UPDATE/DELETE&amp;nbsp;queries;&lt;/P&gt;
&lt;P&gt;Έχοντας υλοποιήσει παρόμοιο μηχανισμό με το δεύτερο που περιγράφω, πιστεύω ότι είναι ο πιο στρωτός και σίγουρος δρόμος, και με εξασφαλισμένο το αποτέλεσμα και θα σου πρότεινα να τον ακολουθήσεις...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;George J.&lt;BR&gt;&lt;/P&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36157.aspx</link><pubDate>Fri, 12 Oct 2007 03:10:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36157</guid><dc:creator>Thiseas</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36157.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36157</wfw:commentRss><description>Χμ.... ναι σωστές όλες οι παρατηρήσεις. &lt;br&gt;&lt;br&gt;Σκεφτείτε όμως οτι υπάρχει ένας πίνακας ο οποίος γεμίζει με SQL statements δυναμικά, τα οποία δεν τα γνωρίζω από πριν, παρά μόνο στο runtime.&lt;br&gt;Αυτά τα Select statements συνδέονται δυναμικά με ένα data grid στο οποίο (ακόμα και μένα απλό join), δεν μπορω να κάνω update....&lt;br&gt;&lt;br&gt;Φοβάμαι οτι τον parser δεν τον "γλυτώνουμε"...&lt;br&gt;</description></item><item><title>Απ: Dynamic SQL generation is not supported against multiple base tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/36156.aspx</link><pubDate>Fri, 12 Oct 2007 02:42:58 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:36156</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/36156.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=78&amp;PostID=36156</wfw:commentRss><description>&lt;P&gt;Ακόμα και η απλή περίπτωση των πινάκων Χ, Υ, Ζ δεν είναι καθόλου απλή. Γιατί να θεωρούμε ότι ο Χ είναι ο βασικός πίνακας? Η σειρά των πινάκων σε ένα join δεν παίζει κανένα ρόλο. Δεν είναι δυνατόν από τη σειρά των πινάκων ή το ότι κάποιοι συνδέονται με inner join, να συμπεράνει κανείς ότι ένας από αυτούς είναι βασικός. Άσε, που αν το join δεν είναι στα primary keys, όχι ποιός είναι ο σωστός πίνακας δεν μπορείς να ξέρεις, αλλά ούτε καν ποιό είναι το σωστό row. Το ADO 2.0 σου επέτρεπε μέσω διαφόρων properties να κάνεις updates σε πολύ περιορισμένες περιπτώσεις. Αυτό δεν πέρασε στο ADO.NET γιατί δεν χρειάζεται.&lt;/P&gt;
&lt;P&gt;Υπάρχει απλούστερη λύση: Να φορτώσεις τους πίνακες σε ένα dataset, με το relation που θέλεις μεταξύ τους. Με τον τρόπο αυτό δεν υπάρχει καμμία ασάφεια ως προς το ποιοί πίνακες και ποιές γραμμές χρειάζονται updates. Άσε που έτσι φορτώνεις και σημαντικά λιγότερα δεδομένα. &lt;/P&gt;</description></item></channel></rss>