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

 

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

Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

Îåêßíçóå áðü ôï ìÝëïò dtakis. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 22-02-2007, 13:54. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  22-02-2007, 12:17 25332

    Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

    table: users

    userid: int

    name: varchar(10) 

    SqlCommand sqlCommandCheck = new SqlCommand("SELECT * FROM users WHERE userid=@ParameterUserID AND name='@ParameterName' ", matchSqlConnection);
    sqlCommandCheck.Parameters.AddWithValue("@ParameterUserID", userid);
    sqlCommandCheck.Parameters.AddWithValue("@ParameterName", name);

    SqlDataReader readerSql = sqlCommandCheck.ExecuteReader();

    if (!readerSql.HasRows) ...

     Εδώ παίρνω ότι ΔΕΝ έχει γραμμές ενώ έχει

    SqlCommand sqlCommandCheck = new SqlCommand("SELECT * FROM users WHERE userid=" + userid+ " AND name='" + name+ "' ", matchSqlConnection);

    SqlDataReader readerSql = sqlCommandCheck.ExecuteReader();

    if (!readerSql.HasRows) ...

    Εδώ παίρνω ότι ΈΧΕΙ γραμμές (όπως και συμβαίνει) 

     

    Και έχω και ένα δεύτερο ερώτημα :

    Γιατί αν βάλω SELECT * FROM users WHERE userid='" + userid+ "' AND name='" + name+ "' 

    Δηλαδή '' σε τιμή για int χτυπάει error για αδυναμία convertion σε int ή tinyint κτλ. Αφού το παραγόμενο ερώτημα αν το εκτελέσω στον SQL Server επιστρέφει κανονικά απάντηση.

     

    Τι πρέπει να γνωρίζω για τον SQL Server & SQL και δεν το γνωρίζω; 

    Δημοσίευση στην κατηγορία: , ,
  •  22-02-2007, 12:24 25333 σε απάντηση της 25332

    Απ: Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

    Οταν το πεδιο ειναι string (nvarchar) στο query πρεπει να περνας την τιμη μαζι με το (') μονο αυτακι στην αρχη και στο τελος.

    π.χ. select * from Table where Pedio = 'userID'

    αν η τιμη ειναι αριθμητικη (int) η τιμη πρεπει να περναει σκετη

    π.χ. select * from Table where Pedio = 9

    ελπιζω να σε βοηθησα

  •  22-02-2007, 12:29 25335 σε απάντηση της 25332

    Απ: Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

    dtakis:

    SqlCommand sqlCommandCheck = new SqlCommand("SELECT * FROM users WHERE userid=@ParameterUserID AND name='@ParameterName' ", matchSqlConnection);

    Βάζεις το όνομα της παραμέτρου σε ' ', δηλαδή ζητάς τους χρήστες που έχουν για όνομα '@ParameterName'. Αμφιβάλλω αν έχεις τέτοιο χρήστη Smile


    Νατάσα Μανουσοπούλου
  •  22-02-2007, 12:40 25336 σε απάντηση της 25335

    Απ: Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

    καποια ειναι ποιο παρατηρηρικη απο μενα Stick out tongue

    δικιο εχεις

  •  22-02-2007, 12:50 25337 σε απάντηση της 25335

    Απ: Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

    Σωστή!

    Αν θέλω να περάσω το (') πρέπει να το κάνω στο

    sqlCommandCheck.Parameters.AddWithValue("@ParameterName", " '"+name+"' ");

    ;

    ή Δεν χρειάζεται να περνάω (') αν χρησιμοποιώ Parameters;

    Την έπαθα εντελώς σαν αρχάριος (που είμαι!)

     

  •  22-02-2007, 13:54 25342 σε απάντηση της 25337

    Απ: Γιατί το ίδιο ερώτημα με Parameters και χωρίς φέρνει μία reader.HasRows false και true;

    Δεν χρειάζεται να περνάς τίποτε επιπλέον, μόνο την τιμη της παραμέτρου. Όταν χρησιμοποιείς παραμέτρους το ADO.NET δεν χρειάζεται να μετατρέψει τις τιμές τους σε string ή κάτι άλλο για να τις στείλει στον SQL Server ή σε άλλη βάση, καθώς ξέρει ήδη πως να τις στείλει στον server. Έτσι γλυτώνεις και από προβλήματα μετατροπής ημερομηνιών και δεκαδικών, τα οποία πρέπει να αντιμετωπίζεις κάθε φορά που δημιουργείς ένα sql string με ενσωματωμένες τις τιμές των παραμέτρων


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems