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

 

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

Stored procedure (out of order)!

Îåêßíçóå áðü ôï ìÝëïò Παπαδημητρίου Γεώργιος. Τελευταία δημοσίευση από το μέλος Παπαδημητρίου Γεώργιος στις 06-10-2007, 09:59. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-09-2007, 09:05 35028

    Stored procedure (out of order)!

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

    καταρχήν δεν μπαίνω στην αντιπαράθεση stored procedure vs ...

    απλά η συγκεκριμένη και όχι μόνο stored procedure δεν επιστρέφει αποτελέσματα απο τη βάση δεδομένων.

    Από την άλλη εαν εκτελέσω κατ' ευθειαν την procedure δινοντας τις παραμέτρους manual και όχι μεσα απο τη vb.net τοτε δεν υπάρχει κανενα προβλημα.

    Εαν μπορουσατε να μου υποδειξετε τι ακριβως κανω λάθος θα σας ημουν ιδιαιτερως ευγνωμων!

    Ευχαριστώ εκ των προτερων.

     

    ########################STORED PROCEDURE PART###########################

    ALTER PROCEDURE gipapbase.GF

    (

    @Gipedouxos nvarchar(50),

    @Filoksenoumeni nvarchar(50)

    )

    AS

    /* SET NOCOUNT ON */

    SELECT Diorganosi, Assos, Gipedouxos, Xi, Filoksenoumeni, Diplo, AkrivesSkor, Teliko, Hmerominia

    FROM dbo.MainDB

    WHERE (Gipedouxos = @Gipedouxos) AND (Filoksenoumeni = @Filoksenoumeni)

    RETURN

    ##################VB.NET PART####################################

    Dim Diorganosi, AA, Gipedouxos, Filoksenoumeni, Assos, Xi, Diplo As String

    Dim i As Integer

    If Session("AA") Is Nothing Then Exit Sub

    AA = Session("AA").ToString

    Dim myConStr As String

    myConStr = ConfigurationManager.ConnectionStrings("Conn").ConnectionString

    Dim myConn As New SqlConnection(myConStr)

    myConn = New SqlConnection(myConStr)

    myConn.Open()

    Dim myCmd As New SqlCommand("SELECT * FROM Coupon WHERE AA =('" & AA & "')", myConn)

     

    dsh.Clear()

    Dim da As New SqlDataAdapter

    da.SelectCommand = myCmd

    da.Fill(dsh)

    Dim mainTable As New Data.DataTable("Table")

    da.Fill(mainTable)

    dv.Table = dsh.Tables(0)

    Diorganosi = dv.Item(i)("Diorganosi")

    Assos = dv.Item(i)("Assos")

    Gipedouxos = dv.Item(i)("Gipedouxos")

    Xi = dv.Item(i)("Xi")

    Filoksenoumeni = dv.Item(i)("Filoksenoumeni")

    Diplo = dv.Item(i)("Diplo")

     

    myCmd.CommandType = Data.CommandType.StoredProcedure

    myCmd.CommandText = "GF"

    With myCmd.Parameters

    .Add("@Gipedouxos", Data.SqlDbType.NVarChar).Value = Gipedouxos

    .Add("@Filoksenoumeni", Data.SqlDbType.NVarChar).Value = Filoksenoumeni

    End With

    myCmd.ExecuteNonQuery()

    myConn.Close()

  •  16-09-2007, 11:46 35030 σε απάντηση της 35028

    Απ: Stored procedure (out of order)!

    Καταρχήν, κάτι που δεν έχει να κάνει με την εκτέλεση της sp. Η παρακάτω γραμμή μπορεί να δημιουργήσει θέματα ασφάλειας:

    Dim myCmd As New SqlCommand("SELECT * FROM Coupon WHERE AA =('" & AA & "')", myConn)

    Βλέπω ότι την τιμή ΑΑ την παίρνεις από μια session variable. Δεν ξέρω πως την βάζεις εκεί, αλλά αν προέρχεται από τον τελικό χρήστη τότε μπορεί να πέσεις θύμα sql injection.
    Π.χ. αν AA="5');DELETE FROM Coupon" θα διαγραφεί όλος ο πίνακας Coupon. Ψάξε για sql injection σε αυτό το site και θα δεις ότι η σωστή εκτέλεση γίνεται με parameters στο sql command.

    Κατά τα άλλα εκτελείς την procedure με ExecuteNonQuery. Αυτό εξ ορισμού δεν επιστρέφει αποτελέσματα. Πρέπει να την εκτελέσεις με ExecuteReader ή να βάλεις την SqlCommand σε έναν SqlDataAdapter και να εκτλέσεις την Fill του data adapter για να γεμίσεις ένα dataset. π.χ.

    myAdapter.SelectCommand = myCmd;
    myAdapter.Fill(myDataSet);

     


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  06-10-2007, 09:59 35901 σε απάντηση της 35030

    Απ: Stored procedure (out of order)!

    Ενα μέγαλο ευχαριστώ!

    Ενα μεγαλο μπραβο σε αυτην την κοινότητα.

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