<?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>WinForms</title><link>https://www.dotnetzone.gr:443/cs/forums/12/ShowForum.aspx</link><description>Θέματα για rich client / windows εφαρμογές, σε οποιαδήποτε γλώσσα (VB.NET, C#, managed C++, κ.α.)</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Multithreaded SQL insertion to tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/78109.aspx</link><pubDate>Tue, 06 Jun 2017 20:24:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:78109</guid><dc:creator>AlKiS</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/78109.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=78109</wfw:commentRss><description>&lt;p&gt;Συμφωνώ απολύτως με τον @&lt;a style="text-decoration-line:none;margin:0px;font-family:Tahoma, Arial, Helvetica;font-size:12.096px;font-weight:bold;text-align:center;" href="https://www.dotnetzone.gr/cs/members/gcapnias.aspx"&gt;George J. Capnias&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Είχα ακριβώς το ίδιο πρόβλημα. Όσων αφορά στη μεταφορά των διαβασμένων αρχείων από το datatable στον SQL Server, το bulkCopy είναι μονόδρομος.&lt;/p&gt;&lt;p&gt;Η χρήση του είναι ως εξής:&lt;/p&gt;&lt;pre style="background-image:initial;background-position:initial;background-size:initial;background-repeat:initial;background-attachment:initial;background-origin:initial;background-clip:initial;"&gt;&lt;font color="#0000ff" face="Consolas"&gt;using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLConn)) {
	bulkCopy.DestinationTableName = KinoDrawsTableName;
	bulkCopy.WriteToServer(item);
}&lt;/font&gt;&lt;/pre&gt;&lt;p&gt;Όπου SQLConn είναι ένα ανοιχτό SQLConnection με τον SQL Server,&lt;/p&gt;&lt;p&gt;TableNameOnSQLServer είναι ένα string με το όνομα του τραπεζιού που θέλεις να περαστεί το datatable στον SQL Server,&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;"&gt;και MyDatatable είναι το datatable που έχουν περαστεί οι εγγραφές από τα csv αρχεία&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Απ: Multithreaded SQL insertion to tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/78068.aspx</link><pubDate>Mon, 24 Apr 2017 19:40:35 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:78068</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/78068.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=78068</wfw:commentRss><description>&lt;p&gt;Καλημέρα σου,&lt;/p&gt;&lt;p&gt;Αν όπως περιγράφεις έχεις χιλιάδες εγγραφές και προσπαθείς μία-μία να τις περάσεις στην βάση, δεν έχει σημασία αν θα το κάνεις με multi-thread ή όχι αφού θα το κάνει ο SQL Server για σένα αυτό, θα καταλήξεις να θέλεις πολλές ώρες. Αυτό θα γίνει, όχι γιατί ο SQL Server είναι αργός, αλλά γιατί για κάθε εγγραφή θα κάνει ολόκληρο τον κύκλο του transaction, που είναι μια χρονοβόρα διαδικασία.&lt;/p&gt;&lt;p&gt;Αυτό που θες πραγματικά ήταν να έφτιαχνες μια διαδικασία, που να έπαιρνε ένα αρχείο σαν είσοδο και με ένα transaction να έβαζε όλες τις εγγραφές στην βάση. Μια τέτοια διαδικασία είναι το BULK COPY που ο SQL Server το υποστηρίζει. Θα μπορούσες να δεις το σχετικό documentation (https://docs.microsoft.com/en-us/sql/relational-databases/import-export/bulk-import-and-export-of-data-sql-server) και την σχετική κλάση που έχει το .NET Framework SqlBulkCopy() (https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v=vs.110).aspx)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;George J.&amp;nbsp;&lt;/p&gt;</description></item><item><title>Multithreaded SQL insertion to tables</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/78063.aspx</link><pubDate>Sat, 22 Apr 2017 17:56:47 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:78063</guid><dc:creator>Q-apprentice</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/78063.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=78063</wfw:commentRss><description>&lt;p&gt;Καλημέρα σας κύριοι !&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;span style="font-size:10pt;"&gt;Αντιμετωπίζω το εξής θέμα και χρειάζομαι τη βοήθεια/γνώση σας. Έχω δημιουργήσει μια εφαρμογή η οποία αφορά αποθήκη ανταλλακτικών. Χρειάζομαι λοιπόν, να κάνω import κάποια αρχεία csv τα οποία όμως ειναι και πολλά και μεγάλα σε μέγεθος. (περίπου 250 αρχεία μεγέθους από 40-130 mb έκαστο). Όπως καταλαβαίνετε με ενδιαφέρει να το κάνω όσο το δυνατό πιο γρήγορα. Σκέφτηκα λοιπόν να το κάνω multithreaded. να διαβάζω δηλαδή τόσα αρχεία ταυτόχρονα, όσα και τα threads που έχει ο εκάστοτε υπολογιστής. Στο τέλος όλα αυτά θα πάνε σε μια βάση MSSQL Server 2008 R2. Η εφαρμογή είναι γραμμένη σε C# με .ΝΕΤ 4.5. Τέλος να αναφέρω ότι ένας πίνακας αποτελείται απο πολλά CSV αρχεία καθότι είναι πάρα πολλές οι εγγραφές που έχει. Τα αρχεια είναι enumerated (π.χ. Table1_1.csv, Table1_2.csv, Table2_1.csv κτλ)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Ποια είναι μια σωστή προσέγγιση στο παραπάνω πρόβλημα ; &lt;/p&gt;&lt;p&gt;Ευχαριστώ εκ των προτέρων&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>