<?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>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75769.aspx</link><pubDate>Sat, 11 Oct 2014 01:51:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75769</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75769.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75769</wfw:commentRss><description>&lt;p&gt;Βασικά η λύση του&amp;nbsp;Παναγιώτη με καλυψε&lt;/p&gt;&lt;p&gt;Σε ευχαριστώ&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75768.aspx</link><pubDate>Fri, 10 Oct 2014 14:50:32 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75768</guid><dc:creator>Markos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75768.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75768</wfw:commentRss><description>Έχασα λίγο τη μπάλα σ' αυτό το thread. Αν όμως κατάλαβα καλά, και αν τα πράγματα συνεχίσουν να έχουν ως έχουν, ίσως θα ήταν καλύτερο να χρησιμοποιήσεις μία transliteration library, όπως τη &lt;a href="http://unidecode.codeplex.com/"&gt;Unidecode&lt;/a&gt;. Κάτι έτοιμο για SQL δε βρήκα, οπότε στον server θα πρέπει να γράψεις εσύ τα functions, χρησιμοπιώντας ως οδηγό τον κώδικα της Unidecode. Από ακαδημαϊκή άποψη, το εγχείρημα είναι ενδιαφέρον. Από επαγγελματική, όμως....&lt;br&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75765.aspx</link><pubDate>Fri, 10 Oct 2014 06:36:16 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75765</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75765.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75765</wfw:commentRss><description>&lt;p&gt;ok , το εκανα, τώρα όσον αφορά τις προτάσεις που λες συμφωνω 100%.&lt;/p&gt;&lt;p&gt;εχει σχεδιαστει λαθος η βαση και τώρα μαλλον καπου το χανουν ή δεν&amp;nbsp;τους νοιάζει.&lt;/p&gt;&lt;p&gt;Ερώτηση. Αν αποφασισουν κ γυρισουν όλα τα varchar σε nvarchar, υπάρχει προβλημα και κινδυνος με τα δεδομάνα; (εγκυκλοπαιδική ερώτηση)&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75762.aspx</link><pubDate>Thu, 09 Oct 2014 23:36:02 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75762</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75762.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75762</wfw:commentRss><description>&lt;p&gt;Καταρχήν, είναι αδύνατο να αποθηκεύσεις μαξιλαράκια σε ελληνικά, κυριλικά, αγγλικά στην ίδια στήλη varchar, καθώς όλα τα codepages έχουν χαρακτήρες που δεν εμφανίζονται στα άλλα. Οπότε ή θα χρειαστείς διαφορετικές στήλες/πίνακες για το καθένα, με διαφορετικό collation ή θα πρέπει να χρησιμοποιήσεις varbinary(max) για να σώσεις το Unicode ως bytes. Και οι δύο είναι γεμάτες μειονεκτήματα.&lt;/p&gt;

&lt;p&gt;Ξεκινώντας από τη δεύτερη λύση, αυτό που προσπαθείς να κάνεις:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Δεν κερδίζεις τίποτε σε χώρο, αφού είσαι αναγκασμένος να σώζεις 2 bytes ανά χαρακτήρα&amp;nbsp;&lt;/li&gt;

&lt;li&gt;Για να δείξεις τα δεδομένα, πάλι σε NVARCHAR θα τα μετατρέψεις&lt;/li&gt;

&lt;li&gt;Χάνεις τη δυνατότητα αναζήτησης στο πεδίο πέρα από το απλό '='. Δεν θα μπορείς να ψάξεις για "Μαξιλαράκια%" ή οτιδήποτε παρόμοιο&lt;/li&gt;

&lt;li&gt;Περιορίζεις δραματικά τη δυνατότητα indexing καθώς συγκρίσεις του στυλ 'από έως', 'μεγαλύτερο','μικρότερο' παύουν να δουλεύουν. &lt;/li&gt;

&lt;li&gt;Αν προσπαθήσεις να κάνεις σύγκριση με την decoded τιμή χάνεις τα indexes - εκτός και αν μετατρέπεις όλα τα κριτήρια αναζήτησης σε binary πρώτα&lt;/li&gt;

&lt;li&gt;Οποιεσδήποτε συγκρίσεις *δεν* θα καταλαβαίνουν τις σχέσεις μεταξύ πχ. i και I. Διαφορετικά bytes σημαίνει ανισότητα και τελείωσες. Που σημαίνει "Μαξιλαράκια"&amp;lt;&amp;gt;"ΜΑΞΙΛΑΡΑΚΙΑ"&lt;/li&gt;

&lt;li&gt;Μειωμένη απόδοση της βάσης γιατί τα blobs αποθηκεύονται εκτός του table row. Που σημαίνει κάθε φορά που θα θέλεις να δείξεις τα μαξιλαράκια η βάση θα πρέπει να κάνει διπλή δουλειά&lt;/li&gt;

&lt;li&gt;Ακατάλυπτα δεδομένα. Προφανώς&lt;/li&gt;

&lt;li&gt;Μεγάλη πιθανότητα καταστροφής των δεδομένων, αρκεί ένας να κάνει μία εγγραφή με λάθος τρόπο, πχ να προσπαθήσει να κάνει CONVERT όπως δοκίμασες κι εσύ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Για να κάνεις τη μετατροπή από/προς μπορείς να χρησιμοποιήσεις την CONVERT βάζοντας όμως ως τύπο το NVARCHAR, ποτέ VARCHAR για να αποφύγεις το μπάχαλο με τα διαφορετικά codepages. Για παράδειγμα:&lt;/p&gt;

&lt;font color="#0000ff" size="2" face="Consolas"&gt;declare&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000"&gt; @myParam&lt;/font&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;nvarchar&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;40&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;)=&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;&lt;font color="#ff0000" size="2" face="Consolas"&gt;N'ВЪЗГЛАВНИЦА'&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;font size="2" face="Consolas"&gt;&lt;font size="2" face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;SELECT&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff00ff" size="2" face="Consolas"&gt;&lt;font color="#ff00ff" size="2" face="Consolas"&gt;&lt;font color="#ff00ff" size="2" face="Consolas"&gt;CONVERT&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;VARBINARY&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;40&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;),&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;@myParam&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;);&lt;font size="1" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;
&lt;p&gt;----------------------------------------------------------------------------------&lt;/p&gt;

&lt;p&gt;0x12042A04170413041B04100412041D04180426041004&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;p&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;SELECT&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt; &lt;/font&gt;&lt;/font&gt;&lt;font color="#ff00ff" size="2" face="Consolas"&gt;&lt;font color="#ff00ff" size="2" face="Consolas"&gt;&lt;font color="#ff00ff" size="2" face="Consolas"&gt;CONVERT&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;&lt;font color="#0000ff" size="2" face="Consolas"&gt;NVARCHAR&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;(&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;40&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;),&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2" face="Consolas"&gt;&lt;font color="#000000" size="2" face="Consolas"&gt;0x12042A04170413041B04100412041D04180426041004&lt;/font&gt;&lt;/font&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font color="#808080" size="2" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;&lt;font size="1" face="Consolas"&gt;
&lt;p&gt;----------------------------------------&lt;/p&gt;

&lt;p&gt;ВЪЗГЛАВНИЦА&lt;/p&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
Προσοχή στον τύπο της μεταβλητής. Είναι nvarchar και δεν πρέπει να αλλάξει, διαφορετικά θα έχεις πάλι το πρόβλημα της απώλειας χαρακτήρων κατά τη μετατροπής από ένα codepage σε άλλο. 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;Μπορείς να προσπαθήσεις να κάνεις το ίδιο και σε κώδικα, αλλά το θέμα παραμένει. Τα δεδομένα πρέπει να μετακινούνται πάντα από Unicode σε binary, ποτέ προσπάθεια μετατροπής σε varchar. Αυτό σημαίνει ότι οποιοδήποτε query, ADO.NET command parameter&amp;nbsp;ή stored procedure θα πρέπει να δουλεύει είτε με varbinary είτε με nvarchar αλλιώς θα έχεις απώλειες.&lt;/p&gt;

&lt;p&gt;Όσο για την πρώτη λύση, μπορείς να προσθέσεις ένα ακόμα πεδίο varchar για κάθε γλώσσα που θέλεις να υποστηρίξεις με COLLATION συμβατό με τη γλώσσα. Αν κατά λάθος αποθηκεύσεις δεδομένα που δεν ταιριάζουν, τα έχασες. Όταν αποθηκεύεις varchar θα πρέπει να φροντίζεις να θέτεις και το COLLATION σε SQL. Αν αποθηκεύεις nvarchar ο SQL Server θα κάνει τη μετατροπή σωστά, φτάνει να μην βρεθούν άκυροι χαρακτήρες (πχ. ελληνικά και ρώσικα στην αγγλική στήλη). &lt;/p&gt;

&lt;p&gt;Φυσικά αυξάνει η πολυπλοκότητα, το μέγεθος των πινάκων, η πιθανότητα λάθους, αλλά τουλάχιστον μπορείς να διαβάσεις τα δεδομένα &lt;/p&gt;

&lt;p&gt;Ουσιαστικές λύσεις τώρα:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;div&gt;Αν το "δεν γίνεται" το λέει το αφεντικό, βρες άλλη δουλειά. &lt;/div&gt;&lt;/li&gt;

&lt;li&gt;
&lt;div&gt;Αν το λέει ο manager, υπολόγισε το κόστος σε ανθρωποώρες, το δικό σου για την υλοποίηση και το κόστος από λάθη (συν το marketing cost αν τα μαξιλαράκια εμφανιστούν σαν κουτάκια) και πες του ότι θα πρέπει να το αναλάβει αυτός&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;
&lt;div&gt;Αν το λέει ο κατασκευαστής της εφαρμογής που χρησιμοποιείς, πες του να τη διορθώσει. Αν αρνείται, χρέωσε του τις ώρες που θα χρειαστείς για να τη διορθώσεις εσύ&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;
&lt;div&gt;Αν αρνείται, βρες άλλη. Υπάρχουν και άνθρωποι που ξέρουν από βάσεις&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;
&lt;div&gt;Αν ο κατασκευαστής είναι Microsoft partner και προσπαθεί να τα ρίξει στον SQL Server και αρνείται να διορθώσει το πρόβλημα, κάρφωσε τον στην Microsoft Hellas. Θα χαρούν να του μιλήσουν&lt;/div&gt;&lt;/li&gt;

&lt;li&gt;
&lt;div&gt;Μπορείς φυσικά να του κάνεις και αγωγή γιατί σου πούλησε εν γνώση του ελλατωματικό προϊόν. Το μισό DNZ θα έρθουν μάρτυρες υπέρ σου.&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75761.aspx</link><pubDate>Thu, 09 Oct 2014 23:15:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75761</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75761.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75761</wfw:commentRss><description>&lt;P&gt;Το ξέρω αυτό, δυστηχώς θα πρεπει να ζησω με αυτό, ως ότου το "διορθώσουν" και κανουν ΚΑΙ την ζωή μου πιο ευκολη&lt;/P&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75760.aspx</link><pubDate>Thu, 09 Oct 2014 22:56:51 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75760</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75760.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75760</wfw:commentRss><description>&lt;P&gt;Από τεχνικής σκοπίας, αυτό που ΔΕΝ γίνεται, είναι αυτό που προσπαθείς να κάνεις.&amp;nbsp;&amp;nbsp;Οι unicode τύποι υπήρχαν εξαπανέκαθεν και δεν κοστίζει τίποτε να τους χρησιμοποιήσεις. Αντίθετα, θέλει δουλειά για να κάνεις τη ζημιά και δουλειά για να τη διορθώσεις. &lt;/P&gt;
&lt;P&gt;Το οποίο σημαίνει ότι το πρόβλημα είναι πολιτικό και χρεώνεσαι εσύ το κόστος επειδή κάποιος άλλος δεν θέλει να παραδεχθεί το λάθος. &lt;/P&gt;
&lt;P&gt;Μετά τον καφέ θα αναφέρω τις διάφορες πολιτικές λύσεις και ίσως κάποιες ματσακωνιές που μπορεί να καλύψουν το πρόβλημα - όχι να το λύσουν. Η T-SQL δεν έχει πολιτικές προεκτάσεις.&lt;/P&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75759.aspx</link><pubDate>Thu, 09 Oct 2014 22:31:15 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75759</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75759.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75759</wfw:commentRss><description>&lt;P&gt;Δυστυχώς δεν τα πεδία δεν μπορούν να είναι σε nvarchar αλλα ειτε varchar ειτε image&amp;nbsp; και δεν μπορώ να κανω κατι σε αυτό&lt;/P&gt;
&lt;P&gt;γιαυτό και το κανω ετσι&lt;/P&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75758.aspx</link><pubDate>Thu, 09 Oct 2014 21:36:45 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75758</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75758.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75758</wfw:commentRss><description>&lt;P&gt;Τί προσπαθείς να κάνεις?&amp;nbsp;&lt;SPAN style="FONT-SIZE:10pt;"&gt;Γιατί κάνεις όλο αυτό το γύρω-γύρω αντί να σώσεις απλά το string ως nvarchar? Άντε nvarchar(max) αν πραγματικά περιμένεις blobs μεγαλύτερα από 4Κ.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Ο SQL Server και το .NET δεν έχουν κανένα πρόβλημα να δουλέψουν με Unicode - τα .NET strings είναι Unicode έτσι κι αλλιώς, ενώ ο SQL Server υποστηρίζει Unicode data μεσω των nchar, nvarchar τύπων - s&lt;SPAN style="FONT-SIZE:10pt;"&gt;ays the guy who sells tickets to Korea and Russia.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Για να μην έχεις πρόβλημα, απλά όρισε τα πεδία σου ως nvarchar και φρόντισε να αποθηκεύσεις σωστά τα strings:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Όταν γράφεις T-SQL πρέπει να βάζεις το 'N' μπροστά από το string για να καταλάβει η βάση ότι στέλνεις Unicode και όχι ASCII, π.χ.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Tahoma, Arial, Helvetica;"&gt;UPDATE myTbl SET MultiTXT1=Ν'ВЪЗГЛАВНИЦА МЕКА MICROFIBER-1000 50Χ70' WHERE CODE='003365'&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Όταν γράφεις στη βάση, φρόντισε να χρησιμοποιείς parameterized queries των οποίων ο τύπος είναι nvarchar αντί για χύμα SQL. Μπορείς να χρησιμοποιήσεις και χύμα SQL φτάνει να βάλεις το N.&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Όσο για το τί συμβαίνει με τα conversions - σκέψου &lt;I&gt;πόσα και ποιά&lt;/I&gt;&amp;nbsp;conversions κάνεις. Κάποια τα κάνεις στην C# θεωρώντας UTF16, μετά τα στέλνεις στη βάση όπου τα 2bytes τα χειρίζεσαι λες και είναι 1-byte ASCII (varchar), μετά τα μετατρέπεις από και προς το codepage της βάσης (Greek), και τέλος άλλο ένα conversion από της βάσης στο codepage του χρήστη, όταν διαβάζεις από τη βάση και προσπαθείς να μετατρέψεις ASCII σε Unicode θεωρώντας ότι το codepage είναι αυτό του χρήστη ...&lt;/P&gt;
&lt;P&gt;Δεν αξίζει καν να προσπαθήσεις να καταλάβεις σε ποιό σημείο καταστράφηκαν τα δεδομένα καθώς η 2η μετατροπή πρέπει ήδη να έχει καταστρέψει χαρακτήρες που δεν εμφανίζονται στα ελληνικά.&lt;/P&gt;
&lt;P&gt;Είχα γράψει και ένα σχετικό blog post πριν άπειρα χρόνια, &lt;A href="http://www.dotnetzone.gr/cs/blogs/pkanavos/archive/2007/01/18/23726.aspx" target=_blank&gt;"Ο SQL Server δεν χρειάζεται κόλπα για να υποστηρίξει ελληνικά"&lt;/A&gt; το οποίο περιέχει πάνω-κάτω αυτά που έγραψα και παραπάνω&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75757.aspx</link><pubDate>Thu, 09 Oct 2014 21:32:00 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75757</guid><dc:creator>George J. Capnias</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75757.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75757</wfw:commentRss><description>&lt;p&gt;Καλημέρα,&lt;/p&gt;&lt;p&gt;Επειδή η "τακτική" που χρησιμοποιείς είναι λίγο "ανορθόδοξη"&amp;nbsp;τι ακριβώς προσπαθείς να κάνεις;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;George J.&lt;br&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>c# byte[] vs sql byte</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/75756.aspx</link><pubDate>Thu, 09 Oct 2014 20:14:14 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:75756</guid><dc:creator>evagelos</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/75756.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=12&amp;PostID=75756</wfw:commentRss><description>&lt;P&gt;Γεια σας, παιδια,&lt;/P&gt;
&lt;P&gt;εχω ένα πεδίο σε μια βαση με τυπο [CCCMultiTXT1] [image] NULL&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;εχω ένα textbox και τα μετατρέπω σε byte[] για να τα αποθηκευσω και στη συνεχεια τα διαβαζω.&lt;/P&gt;
&lt;P&gt;οι δυο functions:&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static byte[] GetBytes(string str)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte[] bytes = new byte[str.Length * sizeof(char)];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return bytes;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;και&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string ConvByteToStr(byte[] myByte)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (myByte != null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char[] chars = new char[myByte.Length / sizeof(char)];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; System.Buffer.BlockCopy(myByte, 0, chars, 0, myByte.Length);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return new string(chars);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return "";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;όλα παιζουν καλα.&lt;/P&gt;
&lt;P&gt;Παω τώρα να αποθηκευσω την τιμή από ένα sql query αλλα όταν τα διαβαζω μου βγαινουν "κινεζικα"&lt;/P&gt;
&lt;P&gt;UPDATE myTbl SET MultiTXT1= (CONVERT(IMAGE,'ВЪЗГЛАВНИЦА МЕКА MICROFIBER-1000 50Χ70')) WHERE CODE='003365'&lt;BR&gt;UPDATE myTbl SET CCCMultiTXT1= CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'ВЪЗГЛАВНИЦА МЕКА MICROFIBER-1000 50Χ70')) WHERE &lt;/P&gt;
&lt;P&gt;εχω δοκιμάσει και τα 2 &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;αυτά που βλέπω στο textbox είναι:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;ВЪЗГЛАВНИЦА МЕКА MICROFIBER-1000 50Χ70 &lt;/P&gt;
&lt;P&gt;όταν τα περναω από την c#&lt;/P&gt;
&lt;P&gt;㼿㼿㼿㼿㼿‿㼿㼿䴠䍉佒䥆䕂ⵒ〱〰㔠휰〷 &lt;/P&gt;
&lt;P&gt;όταν τρέχω από το sql.&lt;/P&gt;
&lt;P&gt;Η βάση έχει collation Greek_CI_AS αν παιζει ρολο&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;τι δεν κανω σωστά και που;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ευχαριστώ εκ των προτερων&lt;/P&gt;</description></item></channel></rss>