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

 

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

Αν είναι σωστή πρακτική

Îåêßíçóå áðü ôï ìÝëïò DaltonGR. Τελευταία δημοσίευση από το μέλος KelMan στις 29-12-2008, 21:41. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  29-12-2008, 11:01 47249

    Αν είναι σωστή πρακτική

    Καλημέρα και χρόνια πολλά,
    Μια ερώτηση έχω να κάνω, για το αν ο κώδικας που έγραψα είναι σωστός λογικά. Γεμίζω ένα datareader με ένα sqlcommand, select είναι και γυρίζει κάποια rows πίσω, έχω φτιάξει μια ρουτίνα
    που εισάγει τα δεδομένα αυτά σε άλλον πίνακα, όχι όλα τα πεδία μονο αυτά που χρειάζομαι, και περνάω σαν παράμετρο στην ρουτίνα το datareader αυτό. Είναι σωστή πρακτική ή θα χτυπήσει κάπου κάποτε αυτό.
    Πρός το παρόν δουλέυει κανονικά.

    Ευχαριστώ εκ των προτέρων.
  •  29-12-2008, 12:31 47250 σε απάντηση της 47249

    Απ: Αν είναι σωστή πρακτική

    Εάν είναι δυνατό δείξε λίγο κώδικα γιατί μπερδεύομαιStick out tongue

  •  29-12-2008, 12:50 47251 σε απάντηση της 47250

    Απ: Αν είναι σωστή πρακτική

    Δέν έχει κάτι το ιδιαίτερο ο κώδικας. Εχω ένα sql command το οποίο κάνει Select δεδομένων με Join ,και αυτά τα δεδομένα τα αποθηκέυω σε έναν αλλο πίνακα της βάσης μου. Απλώς θέλω να ξέρω αν αυτό που κάνω είναι λογικά σωστό και δεν θα σκάσει κάποια στιγμή μπροστά μου :) .

    Using conn As New SqlConnection("")
                            Dim cmdImports As New SqlCommand
                            Dim myRdr As SqlDataReader = Nothing

                            If conn.State = Data.ConnectionState.Closed Then
                                conn.Open()
                            End If

                            Try
                                cmdImports .Connection = conn
                                cmdImports .CommandType = CommandType.Text
                                cmdImports .CommandText = ""
                                "Where α = @α And β = @β"

                                cmdImports .Parameters.Add(New SqlParameter("@α", SqlDbType.Int)).Value = α
                                cmdImports .Parameters.Add(New SqlParameter("@β", SqlDbType.Int)).Value = β

                                myRdr = cmdImports .ExecuteReader

                                importDataToDB( myRdr)

                                imported = True
                            Catch exep As Exception
                                MsgBox(exep.Message, MsgBoxStyle.Information, "Σφάλμα εισαγωγής")
                                imported = False
                            End Try
                            cmdImports .Dispose()
                            conn.Close()
                            conn.Dispose()
    End Using

    και απλώς η ρουτίνα importDataToDB διαβάζει τα στοιχεία του reader και τα αποθηκέυει στην βάση δεδομένων..

    ευχαριστώ και πάλι.


  •  29-12-2008, 13:24 47252 σε απάντηση της 47251

    Απ: Αν είναι σωστή πρακτική

    Κοίταξε, δεν βρίσκω κάτι λάθος ως προς τον τρόπο. Εναλλακτικά, θα μπορούσες να εισάγεις ως όρισμα ένα ArrayList το οποίο θα γεμίζει από το DataReader.
  •  29-12-2008, 13:45 47254 σε απάντηση της 47252

    Απ: Αν είναι σωστή πρακτική

    Εγώ αυτό που δεν βλέπω είναι πού κλείνει ο datareader (και ποιός έχει την ευθύνη να τον κλείσει).

    Αν χρησιμοποιήσεις datareader, τότε θα πρέπει να τον κλείσεις όταν τελειώσεις. Εφόσον όμως τον περνάς σε άλλη μέθοδο (και μην ξεχνάμε οτι ο datareader είναι ένα "ζωντανό" connected object) τότε ο caller θα πρέπει να έχει την ευθύνη να τον κλείσει είτε όταν όλα πάνε καλά είτε αν συμβεί κάποιο σφάλμα. Η καλύτερη λύση είναι ένα Finally clause στο exception handling σου αν θέλεις να χειριστείς και τις δύο περιπτώσεις από το ίδιο σημείο.

    Επίσης ένα Dispose() στον Datareader δεν θα ήταν άσχημη ιδέα.

     

     

     


    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  29-12-2008, 14:15 47256 σε απάντηση της 47254

    Απ: Αν είναι σωστή πρακτική

    Ναι σωστά, εγώ έδωσα βάση μόνο στο όρισμα που περνάει. Φαντάστηκα ότι το θεωρεί αυτονόητο.
  •  29-12-2008, 14:16 47257 σε απάντηση της 47254

    Απ: Αν είναι σωστή πρακτική

    Ευχαριστώ παρα πολύ. Θα το φτίαξω αυτό με το datareader να σιγουρευτώ ότι το κλείνω να μην έχω πρόβλημα.

    Χρόνια πολλά και πάλι καλή χρονιά.
  •  29-12-2008, 14:27 47258 σε απάντηση της 47257

    Απ: Αν είναι σωστή πρακτική

    Επίσης χρόνια πολλά και καλή χρόνια παιδιά!
  •  29-12-2008, 21:41 47280 σε απάντηση της 47251

    Απ: Αν είναι σωστή πρακτική

    Παίδες, καλύτερα είναι αυτή η υλοποίηση:

            Using sqlCn As SqlConnection = New SqlClient.SqlConnection
                sqlCn.ConnectionString = "Data Source=(local);Initial Catalog=AdventureWorks;Integrated Security=True"
                Try
                    sqlCn.Open()
                    Dim strSQL As String
                    strSQL = "UPDATE Test2 SET
    Name=@Name,ListPrice=@ListPrice, ProductID=@ProductIDNew" & _
                                  " WHERE
    ProductID=@ProductIDOld
                    strSQL = "SELECT Name,ListPrice, ProductID FROM Test2 WHERE ListPrice > " & TextBox1.Text
                    Using sqlCmd As SqlCommand = New SqlCommand(strSQL, sqlCn)
                        Using sqlReader As SqlDataReader = sqlCmd.ExecuteReader
                            MsgBox(sqlCmd.CommandText)
                            Dim ordProductID As Integer = sqlReader.GetOrdinal("ProductID")
                            Dim ordName As Integer = sqlReader.GetOrdinal("Name")
                            Do While sqlReader.Read
                                Dim strData As String = sqlReader.GetValue(ordProductID).ToString & _
                                                        " - " & sqlReader.GetString(ordName)
                                ListBox1.Items.Add(strData)
                            Loop
                        End Using
                    End Using
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try
            End Using

     

    Το Using δεν χρειάζεται Dispose, κλπ, that's the beauty!

     


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