<?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>Πρώτα Βήματα - Βάσεις δεδομένων</title><link>https://www.dotnetzone.gr:443/cs/forums/73/ShowForum.aspx</link><description>Για όσους κάνουν τα πρώτα τους βήματα στην Microsoft Access ή τον SQL Server, ή γενικότερα στη θεωρία βάσεων δεδομένων.</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70287.aspx</link><pubDate>Mon, 21 May 2012 19:43:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70287</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70287.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70287</wfw:commentRss><description>&lt;BLOCKQUOTE&gt;&lt;div&gt;&lt;img src="http://www.dotnetzone.gr/cs/Themes/default/images/icon-quote.gif"&gt; &lt;strong&gt;kos6101991:&lt;/strong&gt;&lt;/div&gt;&lt;div&gt;Ευχαριστω για τις απαντησεις το ελυσα το θεμα..μονο που θελω να εχω 3 textBoxes εκει αυτο που συμβαινει ειναι οτι και τα τρια κελια του ινακα παιρνουν την τιμη του πρωτου textBox..Ενω στην εντολη αλλαζουν...&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;/BLOCKQUOTE&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο κώδικας όπως τον έγραψε ο&amp;nbsp;kos6101991 και τον άλλαξε ο serakar αποθηκεύει πρώτα την τιμή z στο control TextBox1.Text και μετά χρησιμοποιεί την τιμή του TextBox1.Text στο query. Αν το ίδιο γίνεται και για τα άλλα textboxes, η τιμή όλων αντικαθίσταται με την τιμή z, απ' όπου και αν προέρχεται αυτή.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μήπως υπάρχει λάθος και αντί για&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;textBox1.Text=z;&lt;/span&gt;&lt;/pre&gt;έπρεπε να είναι&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;z=TextBox1.Text;&lt;/span&gt;&lt;/pre&gt;Αν το κομμάτι κώδικα προέρχεται από κάποιο "μακρυνάρι" όπου η ίδια μεταβλητή z χρησιμοποιείται για διαφορετικά textboxes, η τιμή της θα είναι πάντα η αρχική τιμή.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Υπάρχει και άλλο πιθανό πρόβλημα, καθώς η z προφανώς είναι string ενώ το SQL Statement φαίνεται ότι θέλει να την χρησιμοποιήσει ως αριθμό. Αν η z περιέχει '.' ή ',' θα υπάρξει πρόβλημα καθώς το σύμβολο για τα δεκαδικά εξαρτάται από το locale του χρήστη. Αν η ίδια τιμή χρησιμοποιηθεί από χρήστη με διαφορετικό locale, τα αποτελέσματα θα είναι διαφορετικά.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Για να μην υπάρχει πρόβλημα θα πρέπει το πεδίo y της βάσης να είναι numeric με την απαιτούμενη ακρίβεια, και αντί να αποθηκευθεί η z να γίνει μετατροπή πχ. με την &lt;a href="http://msdn.microsoft.com/en-us/library/system.decimal.parse.aspx"&gt;decimal.Parse&lt;/a&gt;&amp;nbsp;για να είναι σίγουρο ότι στη βάση θα αποθηκευτεί αυτό που έδωσε ο χρήστης.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επίσης, δεν πρέπει να χρησιμοποιηθούν τύποι floating point όπως ο double στη βάση ή τον κώδικα, γιατί σχεδόν πάντα υπάρχουν προβλήματα στρογγυλοποίησης που κάνουν αδύνατο τον έλεγχο για ισότητα μεταξύ πεδίων floating point.&lt;/div&gt;</description></item><item><title>Απ: Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70286.aspx</link><pubDate>Mon, 21 May 2012 18:06:26 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70286</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70286.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70286</wfw:commentRss><description>Καταρχήν, να παρακαλέσω τον kos6101991 &lt;strike&gt;serakar&lt;/strike&gt; να χρησιμοποιεί code blocks (είναι το τρίτο εικονίδιο από το τέλος του δεύτερου toolbar, αυτό με τα {} ) για να μπορεί να διαβαστεί ο κώδικας.&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μετά, να παρατηρήσω ότι οι λύσεις που δόθηκαν ως τώρα είναι επικίνδυνες για τον γνωστό λόγο του SQL injection και θα αποτύχουν σίγουρα σε περιβάλλον με ελληνικά local settings. Είτε κάνει κάποιος string concatenation, είτε κάνει String.Format, η τιμή 0.6 στα ελληνικά θα μετατραπεί σε 0,6 και το SQL θα αποτύχει.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;Όσο για το SQL Injection, αν η τιμή z προέρχεται από user input, μπορεί άνετα ο χρήστης να βάλει κάτι "έξυπνο" όπως "0;drop table XXX; --" και να κάνει ζημιές.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Για το λόγο αυτό ΔΕΝ ΠΡΕΠΕΙ ΠΟΤΕ να δημιουργούμε sql strings με concatenation ή String.Format (το ίδιο είναι εξάλλου).&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Ο σωστός (και ευκολότερος και ταχύτερος) τρόπος να περάσει κανείς παραμέτρους σε SQL είναι με parameterized queries:&lt;/div&gt;&lt;div&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;            using(&lt;span style="color:Fuchsia;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;var&lt;/span&gt; conn = new SqlConnection(@"Data Source=KOSTAS-PC;Initial Catalog=form;Integrated Security=True"))
            {
                &lt;span style="color:Fuchsia;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;var&lt;/span&gt; cmd = new SqlCommand("&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;update&lt;/span&gt; krithrio1 &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;set&lt;/span&gt; y=@y &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;where&lt;/span&gt; x=@x", conn);
                cmd.Parameters.AddWithValue("@y", 0.6);
                cmd.Parameters.AddWithValue("@x", 25);
                conn.&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;Open&lt;/span&gt;();
                cmd.ExecuteNonQuery();                
            }&lt;/span&gt;&lt;/pre&gt;Ο παραπάνω κώδικας στέλνει τις παραμέτρους στο server με τον αρχικό τους τύπο, χωρίς μετατροπές σε string, με αποτέλεσμα να είναι αδύνατο το SQL Injection. Επίσης αποφεύγονται οι μετατροπές οπότε δεν έχουμε προβλήματα με υποδιαστολές. Τέλος, είναι πολύ ταχύτερος γιατί αφενός αποφεύγονται οι μετατροπές, αφετέρου ο server μπορεί να κρατήσει το ίδιο compiled query για αναφορά στο μέλλον, χωρίς να ξανακάνει compile. Επιπλέον, μεταφέρει λιγότερα bytes απ' ότι αν μετατρέπαμε την αντίστοιχη τιμή σε string.&amp;nbsp;&lt;/div&gt;&lt;div&gt;Όλα αυτά τα οφέλη αθροίζονται όσο τρέχει μία εφαρμογή και μπορεί να γλυτώσουν χρόνο που ξεπερνάει ακόμα και το 50% αν γίνονται συχνές όμοιες κλήσεις στη βάση.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Προβλήματα μετατροπής εμφανίζονται και όταν κανείς χρησιμοποιεί ημερομηνίες ή unicode strings με ελληνικό κείμενο. Χρησιμοποιώντας parameterized queries το πρόβλημα λύνεται άμεσα και ο κώδικας είναι λιγότερος.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Προσοχή τέλος στο using. Οι ανοικτές συνδέσεις στις βάσεις κοστίζουν, γι αυτό και πρέπει να τις κλείνουμε πάντα. Το using φροντίζει να κλείσει η σύνδεση ακόμα και αν υπάρξει exception. Διαφορετικά θα πρέπει να περικλείσουμε το block σε ένα try/finally το οποίο θα ελέγχει αν άνοιξε η σύνδεση και θα την κλείνει στο finally.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Επιπλέον παραδείγματα για το πως περνάμε παραμέτρους υπάρχουν στο documentation της &lt;a href="http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&amp;amp;l=EN-US&amp;amp;k=k(SYSTEM.DATA.SQLCLIENT.SQLPARAMETERCOLLECTION.ADDWITHVALUE);k(TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22);k(DevLang-CSHARP)&amp;amp;rd=true"&gt;Parameters.AddWithValue&lt;/a&gt;&amp;nbsp;και λεπτομερής περιγραφή υπάρχει στο &lt;a href="http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx"&gt;Configuring Parameters and Parameter Data Types&lt;/a&gt;&lt;/div&gt;</description></item><item><title>Απ: Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70285.aspx</link><pubDate>Mon, 21 May 2012 16:36:54 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70285</guid><dc:creator>serakar</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70285.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70285</wfw:commentRss><description>Καλημέρα&lt;br&gt;&lt;br&gt;Αν θέλεις βάλε τον κώδικα που χρησιμοποιείς να τον δούμε, πάντως με την ίδια λογική δουλεύει.&lt;br&gt;</description></item><item><title>Απ: Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70283.aspx</link><pubDate>Mon, 21 May 2012 03:05:41 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70283</guid><dc:creator>kos6101991</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70283.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70283</wfw:commentRss><description>Ευχαριστω για τις απαντησεις το ελυσα το θεμα..μονο που θελω να εχω 3 textBoxes εκει αυτο που συμβαινει ειναι οτι και τα τρια κελια του ινακα παιρνουν την τιμη του πρωτου textBox..Ενω στην εντολη αλλαζουν...&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70282.aspx</link><pubDate>Mon, 21 May 2012 02:11:29 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70282</guid><dc:creator>serakar</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70282.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70282</wfw:commentRss><description>&lt;br&gt;Καλησπέρα&lt;br&gt;&lt;br&gt;Νομίζω ότι αυτό που θες είναι το παρακάτω:&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;textBox1.Text=z; &lt;br&gt;SqlConnection x &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; SqlConnection(); &lt;br&gt;SqlCommand y &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; SqlCommand(); &lt;br&gt;x.ConnectionString=&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;@"Data Source=KOSTAS-PC;Initial Catalog=form;Integrated Security=True"&lt;/span&gt;; &lt;br&gt;y.Connection &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; x; y.CommandText &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; (&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"update krithrio1 set y="&lt;/span&gt;+textBox1.Text+&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;" where x=25"&lt;/span&gt;); &lt;br&gt;x.Open(); &lt;br&gt;y.ExecuteNonQuery(); &lt;br&gt;x.Close(); &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;br&gt;new&lt;/span&gt; Form2().Show();&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;Φυσικά χρησιμοποιώντας αυτόν τον κώδικα υποθέτεις ότι κάποιος θα βάλει στο textbox σωστή τιμή που δεν θα χτυπήσει στην εκτέλεση του update.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description></item><item><title>Απ: Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70281.aspx</link><pubDate>Mon, 21 May 2012 02:03:59 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70281</guid><dc:creator>George Parissis</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70281.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70281</wfw:commentRss><description>&lt;p&gt;y.commandtext=string.format("update krithrio1 set y={0} where x=25",z)&lt;/p&gt;&lt;p&gt;Ο κώδικας είναι σε Vb.Net. Ίσως να έχει την ίδια σύνταξη σε C#.&lt;/p&gt;</description></item><item><title>Update σε εγγραφη μεσω textBox σε WinForm</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/70280.aspx</link><pubDate>Sun, 20 May 2012 20:37:05 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:70280</guid><dc:creator>kos6101991</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/70280.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=73&amp;PostID=70280</wfw:commentRss><description>Παιδια καλησπερα ο κωδικας ειναι ο εξης :
&lt;br&gt;&lt;br&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;textBox1.Text=z; 
SqlConnection x &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; SqlConnection(); 
SqlCommand y &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; SqlCommand(); 
x.ConnectionString=&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;@"Data Source=KOSTAS-PC;Initial Catalog=form;Integrated Security=True"&lt;/span&gt;;
y.Connection &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; x; 
y.CommandText &lt;span style="color:Red;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; (&lt;span style="color:#666666;background-color:#e4e4e4;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"update krithrio1 set y=0.6 where x=25"&lt;/span&gt;); 
x.Open(); 
y.ExecuteNonQuery(); 
x.Close(); 
&lt;span style="color:Blue;background-color:Transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Form2().Show();&lt;/span&gt;&lt;/pre&gt;&lt;br&gt;

Το προβλημα ειναι οτι θελω στη θεση του y=0.6 να ειναι y=z αλλα αυτο μου βγαζει error δηλ. θελω η τιμη που μπαινει στο textBox να μπαινει στη βαση αλλα δεν ξερω πως αυτο να το μεταφερω στην εντολη...

Please HELP!!!</description></item></channel></rss>