Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

Îåêßíçóå áðü ôï ìÝëïò gio1283. Τελευταία δημοσίευση από το μέλος gio1283 στις 21-01-2010, 16:31. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-01-2010, 13:37 56525

    Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    Καλημέρα σε όλους.

    Είμαι πολύ καινούριος στο θέμα .ΝΕΤ γι' αυτό συγχωρήστε με για τυχόν χαζές ερωτήσεις. Έχω δημιουργήσει ένα website το οποίο θέλω να ελέγχει την τιμή name που δίνει ο χρήστης σε ένα textbox όταν αυτός πατάει ένα button,αν είναι ίδια με κάποιο από τα name που υπάρχει σε ένα table στη βάση μου.Αν είναι ίδια να κάνει ResponseRedirect σε άλλη σελίδα και να εκτυπώνει μέσω πίνακα το όνομα και το τηλέφωνο. Η δυσκολία μου είναι στο query για να πάρω την τιμή και να την ελέγξω με στοιχεία τησ βάσης μου. Επίσης σε κάποια Tutorial για σύνδεση sql table είδα γραμμές κώδικα με sql adapter και sql reader. Είναι υποχρεωτικό να βάζουμε και αυτά ή το μόνο που χρειάζεται είναι να κάνουμε open τη σύνδεση?Ο κώδικας μου είναι ο παρακάτω, όποιος μπορεί να βοηθήσει... Ευχαριστώ πολύ..

    protected void Button1_Click(object sender, EventArgs e)

    {

    SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Test\App_Data\vasi1.mdf;Integrated Security=True;User Instance=True;");

    try

    {

    SqlCommand cmd = new SqlCommand("SELECT * FROM katalogos WHERE name= '" @TextBox1.Text"'", conn); <===   ΕΔΩ ΒΓΑΖΕΙ ΛΑΘΟΣ

    conn.Open();

    cmd.ExecuteNonQuery();

    }

  •  21-01-2010, 00:36 56536 σε απάντηση της 56525

    Απ: Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    Ποιο είναι το Exception που σου βγάζει?

    Όπως κι αν έχει, πρέπει να δείς καλύτερα πως δουλεύουν τα parameterized queries στο ADO.NET.
    Δεν δηλώνεται έτσι το value του TextBox1.Text στο query σου.
    Δες αυτό που βρήκα στα γρήγορα.



  •  21-01-2010, 13:22 56554 σε απάντηση της 56525

    Απ: Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    με το να ανοίγεις ένα connection στην βάση, δεν σημαίνει ότι παίρνεις και τα δεδομένα ενός πίνακα, από την βάση που συνδέεσαι.

    το να ανοίγεις ένα connection είναι το πρώτο βήμα.

    για δές ένα άλλο Post  μου , μήπως σε βοηθήσει,

    http://www.dotnetzone.gr/cs/forums/post/49231.aspx

     


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  21-01-2010, 13:26 56555 σε απάντηση της 56525

    Απ: Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    και κάτι άλλο

    η executenonquery, "γυρνάει" τον αριθμό των εγγραφών που επηρέαζονται, από ένα π.χ update statement.εσύ θέλεις να πάρεις τιμή ή τιμές από πίνακα βάσης. δεν είναι αυτό που θέλεις.

    δες εδώ

    http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery.aspx


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  21-01-2010, 14:02 56558 σε απάντηση της 56525

    Απ: Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    Αυτός ο κώδικας δεν πρέπει να κάνει καν compile. Το "SELECT * FROM katalogos WHERE name= '" @TextBox1.Text"'" δεν είναι σωστά γραμμένο string καθώς έχεις ξεχάσει τα + για να κάνεις concatenation.

    Για να φτιάξεις το string θα πρέπει να γράψεις "SELECT * from katalogos WHERE name'" + TextBox1.Text + "'". Καλύτερα όμως είναι να γράψεις String.Format("SELECT * from katalogos WHERE name='{0}'", TextBox1.Text). Έτσι αποφεύγεις μπερδέματα του στυλ "πού πήγε το '".

    Όπως και να έχει πάντως, η χρήση χύμα SQL είναι κακή ιδέα. Καταρχήν, χτυπάς στα προβλήματα που ήδη βρήκες. Αν το TextBox περιέχει κάποια περίεργη τιμή, π.χ. "; drop table katalogos", θα έχεις σημαντικό πρόβλημα. Αυτό είναι το SQL Injection Attack. Επίσης θα έχεις προβλήματα με ελληνικά και ημερομηνίες οι οποίες μπορεί να καταλήξουν στη βάση με περίεργη μορφή, κλπ, κλπ, κλπ.

    Η καλύτερη λύση είναι να χρησιμοποιήσεις παραμέτρους και να γράψεις :

    SqlCommand cmd = new SqlCommand("SELECT * FROM katalogos WHERE name= @name", conn);
    cmd.Parameters.AddWithValue("@name", TextBox1.Text);

    Με τον τρόπο αυτό το ADO.NET αναλαμβάνει να περάσει αυτό το name με το σωστό τρόπο.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-01-2010, 16:02 56563 σε απάντηση της 56558

    Απ: Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    φίλε, σε αυτό που λέει ο παναγιώτης έχει 100% δίκιο. παναγιώτη στο post του, ο φίλος λέει ότι του βγάζει λάθος. φυσικά και δεν κάνει compile.

    SQL injections είναι πολύ άσχημα. για το τί είναι ακριβώς ένα sql injection attack δες εδώ . για να γλιτώσουμε από αυτά, έχουμε stored procedures και παραμετρικά queries.

    μιας και πιάσαμε τις σωστές τεχνικές για το πως συνδεόμαστε σε μια βάση και πέρνουμε από αυτήν δεδομένα , έχω να σου πω το εξής.

    1) τα connection credentials - που συνδεόμαστε στην βάση - δεν τα βάζουμε καρφωτά στον κώδικα. αλλά μπορείς να τα έχεις στο web.config, το οποίο είναι το σωστό μέρος να τα βάλεις. μπορείς να κάνεις encrypt το web.config.

    π.χ σε ένα sample asp.net website που χρησιμοποιώ για τα training sessions μου, μέσα στο web.config σε κάποιο σημείο του xml αρχείου θα βρεις αυτό εδώ

    <connectionStrings>

    <add name="NorthwindConnectionString" connectionString="Data Source=(local);Initial Catalog=Northwind;Integrated Security=True; Min Pool Size=20" providerName="System.Data.SqlClient"/>

    </connectionStrings>

    2) τώρα θα μου πεις, πως θα "πάρω" τα connection credentials, από τον κώδικα μου.γράφεις κάπου στον κώδικα σου το εξής (π.χ Page_Load event, Button1_Clicκ)

    // Get the connection string from the configuration file

    string connectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;

    3) Τώρα (ελπίζω να μην σε μπερδεύω), καλό είναι να ξεχωρίσεις τον κώδικα που γράφεις στο code behind file (.cs ) με τον κώδικα που π.χ ανοίγει το connection στην βάση κ.τ.λ. οπότε πήγαινε στο App_Code special folder που έχεις στον solution explorer. εκεί μπορείς να κάνει add a new item-> class file. ονόμασε το π.χ ConnectionManager . αυτός είναι ο data access κώδικας σου και έτσι είναι πιο "καθαρά" τα πράγματα, seperation of concerns,modularity.

    δηλαδή άμα σου βγάλει ένα λάθος-exception ξέρεις που να ψάξεις. ο κώδικας σου είναι πιο maintenable με αυτό τον τρόπο.επίσης σε ένα άλλο project που θα κάνεις στο μέλλον μπορείς απλά να κάνεις Add, το class file Που κάνει data access-retrieve, χωρίς να ξαναγράφεις τα πάντα όλα από την αρχή. φυσικά θα κάνεις κάποιες αλλαγές.... είναι η λογική των n-tier applications. και είναι μια καλή λογική να έχεις για τις εφαρμογές σου είτε είναι asp.net ή desktop.

    για να σου δώσω ένα παράδειγμα σε σχέση με το connectionstring που σου έδωσα πριν , μπορείς μέσα στον data access (ConnectionManager) κώδικα να βάλεις την εξής (static) Μέθοδο.

    public static SqlConnection GetNorthwindConnection()

    {

    // Get the connection string from the configuration file

    string connectionString = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;

    // Create a new connection object

    SqlConnection connection = new SqlConnection(connectionString);

    // Open the connection, and return it

    connection.Open();

    return connection;

    }

    4) τώρα από το button1_click event handling routine, καλείς την GetNorthwindConnection() κάπως έτσι

    try

    {

    SqlConnection connection = ConnectionManager.GetNorthwindConnection();

    .......

    ...........

    }

    catch (SqlException ex)

    {

    // βάλε και ένα label στο page σου.

    Label1.text = "Cannot connect to the database.";

    }

    5) τώρα και από αυτά που σου γράφει ο παναγιώτης μπορείς να πας παρακάτω. αν όχι εδώ είμαστε....

     

     


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  21-01-2010, 16:31 56564 σε απάντηση της 56563

    Απ: Έλεγχος textbox value με τιμή υπάρχουσας βάσης sql

    Σας ευχαριστώ πολύ όλους σας.. Μόλις είδα τα Post.. Θα τα δοκιμάσω αυτά που μου είπατε,

    Ευχαριστώ και πάλι για το χρόνο σας αν έχω κάποιο πρόβλημα θα σας postάρω την απορία μου

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems