<?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/72/ShowForum.aspx</link><description>Αναρωτιέστε τι σημαίνει object; Class; Inheritance; Design pattern; Την απάντηση μπορείτε να την βρείτε εδώ!</description><dc:language>el</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Απ: Login Form C# and Sql</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62842.aspx</link><pubDate>Mon, 31 Jan 2011 21:26:06 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62842</guid><dc:creator>Παναγιώτης Καναβός</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62842.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=62842</wfw:commentRss><description>Πέρα από το γεγονός ότι αυτό που δεν παίζει είναι το Read, όχι το else, ο τρόπος αυτός ελέγχου password είναι λάθος και επικίνδυνος. Καταρχήν, είναι επικίνδυνο να δίνεις χύμα sql αντί για παραμέτρους. Έτσι μένεις ανοικτός σε sql injection attacks, όπου κάποιος μπορεί να χώσει sql κώδικα μέσα στα πεδία σου. Με το χύμα sql ο κώδικας αυτός θα εκτελεστεί χωρίς πρόβλημα. Δεύτερον, το password δεν πρέπει να αποθηκεύεται ποτέ στη βάση χύμα, γιατί έτσι μπορεί να το διαβάσει οποιοσδήποτε καταφέρει να δει τον πίνακα, π.χ. εκτελώντας ένα sql injection attack. Αντί να αποθηκεύεις χύμα, κάνε&lt;a href="http://msdn.microsoft.com/en-us/library/f9ax34y5.aspx"&gt; Hash &lt;/a&gt;το password και αποθήκευσε το hash. Κάθε φορά που ο χρήστης δίνει το username/password, υπολογίζεις το hash του password που σου δίνει και το συγκρίνεις με αυτό που αποθηκεύτηκε.&amp;nbsp;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Τέλος, αν μπορείς απλά μην βάζεις login form. Όλες οι Windows εφαρμογές ξέρουν ποιός είναι ο χρήστης που τις εκτελεί, έτσι δεν χρειάζεται να του ζητήσεις να ξαναδώσει Username/password. Τα δικαιώματα του χρήστη περνάνε και στην πρόσβαση σε διάφορα resources, π.χ. πρόσβαση σε αρχεία, σύνδεση στον SQL Server κλπ. &amp;nbsp; Για τα web applications μπορείς να χρησιμοποιήσεις τον έτοιμο μηχανισμό authentication που έχει το ASP.NET.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Μπορείς να βρεις ποιός είναι ο χρήστης σε μία Winforms εφαρμογή με την &lt;a href="http://msdn.microsoft.com/en-us/library/sfs49sw0.aspx"&gt;Windows.Identity.GetCurrent()&lt;/a&gt;&amp;nbsp;. &amp;nbsp;Μπορείς να ελέγξεις σε ποιά group ανήκει ο χρήστης (π.χ. επειδή θέλεις να περιορίσεις ποιοί χρήστες έχουν πρόσβαση στην εφαρμογή) μέσω του &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.groups.aspx"&gt;Groups&lt;/a&gt; property.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;</description></item><item><title>Απ: Login Form C# and Sql</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62835.aspx</link><pubDate>Mon, 31 Jan 2011 19:14:53 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62835</guid><dc:creator>gkaz</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62835.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=62835</wfw:commentRss><description>&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;Κάνεις &lt;SPAN style="mso-ansi-language:EN-US;"&gt;query&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;στην βάση με δυο παραμέτρους και μετά ελέγχεις να δεις αν οι εγγραφές που σου επέστρεψαν έχουν όντως τις επιθυμητές τιμές στα αντίστοιχα πεδία.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;Η πραγματική ερώτηση είναι, γιατί θα έπρεπε να παίξει το &lt;SPAN style="mso-ansi-language:EN-US;"&gt;else&lt;/SPAN&gt;; Αν καταφέρεις να απαντήσεις αυτή την ερώτηση θα καταλάβεις το λάθος σου.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;Αν δεν κατάλαβες ήδη την απάντηση και δεν σου αρέσουν οι γρίφοι, τότε δες την απάντηση παρακάτω.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;.&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Query&lt;/SPAN&gt;&lt;SPAN&gt; &lt;/SPAN&gt;με παραμέτρους κάνεις για να σου φέρει μόνο τις εγγραφές που ταιριάζουν με ότι δίνεις στις παραμέτρους και δεν πρόκειται ποτέ να σου φέρει κάτι άλλο. Δεδομένου φυσικά ότι είναι σωστό το &lt;SPAN style="mso-ansi-language:EN-US;"&gt;query. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;Στην περίπτωσή σου, αποτυχία σύνδεσης είναι άμα δεν βρει εγγραφές στην βάση οπότε και ο &lt;SPAN style="mso-ansi-language:EN-US;"&gt;reader&lt;/SPAN&gt; επιστρέφει μηδέν εγγραφές. Έλεγξε το &lt;SPAN style="FONT-SIZE:10pt;"&gt;rdr.Read(). Αν σου επιστρέψει &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;mso-ansi-language:EN-US;"&gt;false&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;"&gt;τότε δεν βρήκε εγγραφή με τα στοιχεία που έδωσες =&amp;gt; αποτυχία σύνδεσης. &lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN:0cm 0cm 0pt;" class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE:10pt;"&gt;Πιστεύω ότι θα παρατήρησες ήδη ότι όταν βάζεις λάθος στοιχεία, δεν βλέπεις καθόλου μήνυμα. Δεν φταίει ότι δεν δουλεύει το &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;mso-ansi-language:EN-US;"&gt;else&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;"&gt;αλλά το ότι είναι σε λάθος σημείο.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Απ: Login Form C# and Sql</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62831.aspx</link><pubDate>Mon, 31 Jan 2011 16:56:07 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62831</guid><dc:creator>Panos.C#</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62831.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=62831</wfw:commentRss><description>&lt;P&gt;Καλημέρα μπορεί κάποιος να με συμβουλέψει γιατι δεν δουλεύει το else.. ευχαριστώ πολύ.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;---- &lt;/P&gt;
&lt;P&gt;private void btnEnter_Click(object sender, EventArgs e) &lt;/P&gt;
&lt;P&gt;{ &lt;/P&gt;
&lt;P&gt;// Sql String builder &lt;/P&gt;
&lt;P&gt;SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); &lt;/P&gt;
&lt;P&gt;builder.DataSource = @".\SqlExpress"; &lt;BR&gt;builder.InitialCatalog = "mits"; &lt;BR&gt;builder.UserID = "sa"; &lt;BR&gt;builder.Password = "sa"; &lt;/P&gt;
&lt;P&gt;// Sql Connection &lt;BR&gt;SqlConnection con = new SqlConnection(); &lt;BR&gt;con.ConnectionString = builder.ConnectionString; &lt;BR&gt;con.Open(); &lt;/P&gt;
&lt;P&gt;// Sql Command &lt;BR&gt;string userSql = "Select userName, userPassword, userFullName " + &lt;BR&gt;" from users " + &lt;BR&gt;"Where userName = @userName and userPassword=@userPassword"; &lt;/P&gt;
&lt;P&gt;SqlCommand com = new SqlCommand(userSql, con); &lt;BR&gt;com.Parameters.AddWithValue("@userName", txtUserName.Text); &lt;BR&gt;com.Parameters.AddWithValue("@userPassword", txtUserPassword.Text); &lt;BR&gt;string userString = txtUserName.Text; &lt;BR&gt;string passwordString = txtUserPassword.Text; &lt;BR&gt;SqlDataReader rdr = com.ExecuteReader(); &lt;BR&gt;while (rdr.Read()) &lt;BR&gt;{ &lt;BR&gt;if (userString == rdr["userName"].ToString() &amp;amp;&amp;amp; passwordString == rdr["userPassword"].ToString())&lt;BR&gt; {&lt;BR&gt; MessageBox.Show("Ok");&lt;BR&gt; }&lt;BR&gt; else&lt;BR&gt; {&lt;BR&gt; MessageBox.Show("Access Denied");&lt;BR&gt; }&lt;BR&gt; }&lt;BR&gt; rdr.Close(); &lt;BR&gt;con.Close();&lt;BR&gt; }&lt;/P&gt;</description></item><item><title>Απ: Login Form C# and Sql</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62830.aspx</link><pubDate>Mon, 31 Jan 2011 16:47:57 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62830</guid><dc:creator>KelMan</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62830.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=62830</wfw:commentRss><description>&lt;P&gt;Καλύτερα φτιάξε λίγο τον κώδικα ώστε να είναι ευανάγνωστος, διαφορετικά δε βλέπω να παίρνεις απάντηση...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item><item><title>Login Form C# and Sql</title><link>https://www.dotnetzone.gr:443/cs/forums/thread/62827.aspx</link><pubDate>Mon, 31 Jan 2011 16:21:46 GMT</pubDate><guid isPermaLink="false">2622095e-976c-431a-859e-16783ec7ecd7:62827</guid><dc:creator>Panos.C#</dc:creator><slash:comments>0</slash:comments><comments>https://www.dotnetzone.gr:443/cs/forums/thread/62827.aspx</comments><wfw:commentRss>https://www.dotnetzone.gr:443/cs/forums/commentrss.aspx?SectionID=72&amp;PostID=62827</wfw:commentRss><description>Καλημέρα μπορεί κάποιος να με συμβουλέψει γιατι δεν δουλεύει το else.. ευχαριστώ πολύ.
---- 
private void btnEnter_Click(object sender, EventArgs e)
        {
            // Sql String builder
            SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
            builder.DataSource = @".\SqlExpress";
            builder.InitialCatalog = "mits";
            builder.UserID = "sa";
            builder.Password = "sa";
            // Sql Connection
            SqlConnection con = new SqlConnection();
            con.ConnectionString = builder.ConnectionString;
            con.Open();
            // Sql Command
            string userSql = "Select userName, userPassword, userFullName " +
                            " from users " +
                            "Where userName = @userName and userPassword=@userPassword";
            SqlCommand com = new SqlCommand(userSql, con);
            com.Parameters.AddWithValue("@userName", txtUserName.Text);
            com.Parameters.AddWithValue("@userPassword", txtUserPassword);
            string userString = txtUserName.Text;
            string passwordString = txtUserPassword.Text;
            SqlDataReader rdr = com.ExecuteReader();
            while (rdr.Read())
            {
                if (userString == rdr["userName"].ToString() &amp;&amp; passwordString == rdr["userPassword"].ToString())
                {
                    MessageBox.Show("Ok");
                }
                else
                {
                    MessageBox.Show("Access Denied");
                }

            }
            rdr.Close();
            con.Close();
        }</description></item></channel></rss>