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

 

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

Tutorial με Custom VB Class

Îåêßíçóå áðü ôï ìÝëïò neoklis. Τελευταία δημοσίευση από το μέλος Libra Storm στις 26-02-2011, 19:04. Υπάρχουν 17 απαντήσεις.
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-02-2011, 14:41 63351

    Tutorial με Custom VB Class

    Καλησπέρα,

    Σε αυτο το http://www.aspnettutorials.com/tutorials/advanced/custom-class-vb.aspx βρηκα ένα tutorial για custom vb classes. Θελησα να πειραματιστώ και να δω πως δουλεύουν έτσι ώστε στην συνέχεια να φτιάξω τις δικές μου. Το κατέβασα λοιπόν και τρέχοντας το παρατήρησα ότι στην default.aspx δεν έχει τίποτα. Πρόσθεσα λοιπόν τα textboxes που θα χρειαστώ (name,age,phone) και στην συνέχεια στο onclick event ενος button έγραψα το παρακάτω. Αυτο που θέλω σε πρώτη φάση να κάνω είναι νέα εγγραφή στην database.

    Partial Class _Default
        Inherits System.Web.UI.Page
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim ObjPerson As New Person() ObjPerson.Age = Me.LblAge.Text ObjPerson.Name = Me.LblName.Text ObjPerson.Telephone = Me.LblPhone.Text ObjPerson.InsertPerson()
    End Sub
    End Class

    Τα properties δουλεύουν κανονικά αλλά όταν πάω να καλέσω την .InsertPerson μου βγάζει το παρακάτω error. Σίγουρα κάτι δεν έχω κάνει καλά αλλά δεν μπορώ να βρω τι.

     

    Warning       23     Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated. C:\Users\whoever\Desktop\Custom-Class-vb\Default.aspx.vb   11     9      C:\...\Custom-Class-vb\

     

    Error  24     Argument not specified for parameter 'thePerson' of 'Public Shared Function InsertPerson(thePerson As Person) As Integer'.  C:\Users\ whoever \Desktop\Custom-Class-vb\Default.aspx.vb       11     9      C:\...\Custom-Class-vb\

     

     


    Dionisis
  •  17-02-2011, 14:48 63352 σε απάντηση της 63351

    Απ: Tutorial με Custom VB Class

    Δεν περνάς όρισμα στην InsertPerson, για αυτό γκρινιάζει, θέλει να περάσεις το person. 

    Ο κώδικας περιμένει αυτό:

    ObjPerson.InsertPerson(ObjPerson)



    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  17-02-2011, 15:32 63353 σε απάντηση της 63352

    Απ: Tutorial με Custom VB Class

    Αλλαξα αυτό που μου είπες σε ObjPerson.InsertPerson(ObjPerson) αλλά εξακολουθούσε να διαμαρτύρεται και μου πρότεινε να το αλλάξω σε Person.InsertPerson(ObjPerson), γιατί άραγε..; στην συνέχεια δοκίμασα να κάνω μια δοκιμαστική εγγραφή αλλά στο connection.open έκανε failed και πήγε στο catch και connection.Close().

     

    Public Shared Function InsertPerson(ByVal thePerson As Person) As Int32
    
            Dim newPersonID As Int32 = 0
    
            Dim connection As New SqlConnection(WebConfigurationManager.ConnectionStrings("ConnectionString").ToString())
    
            Try
    
                Dim cmd As New SqlCommand("sp_InsertPerson", connection)
    
                cmd.CommandType = CommandType.StoredProcedure
    
     
    
                cmd.Parameters.AddWithValue("@Name", thePerson.Name)
    
                cmd.Parameters.AddWithValue("@Age", thePerson.Age)
    
                cmd.Parameters.AddWithValue("@Telephone", thePerson.Telephone)
    
     
    
                connection.Open()
    
                newPersonID = Convert.ToInt32(cmd.ExecuteScalar())
    
                connection.Close()
    
            Catch
    
                connection.Close()
    
            End Try
    
            Return newPersonID
    
        End Function

     

    Το connectionstring στο webconfig.

           <connectionStrings>
    
                  <add name="ConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=App_Data\Database.mdf;Integrated Security=True;User Instance=True" providerName="System.Data.SqlClient"/>
    
           </connectionStrings>

     

     


    Dionisis
  •  17-02-2011, 15:49 63354 σε απάντηση της 63353

    Απ: Tutorial με Custom VB Class

    Για να στο είπε έτσι, πάει να πει ότι η μέθοδος InsertPerson είναι static, άρα μπορείς να την καλέσεις χωρίς να δώσεις instance στο αντικείμενο.

    Έχεις sql server εγκατεστημένο; Το connection string είναι δικό σου ή είναι κατεβασμένο; Ψιλοgeneric μου φαίνεται (Database.mdb ? )

    Χώρια που φωνάζει και stored procedures. Εσύ μόνο τον κώδικα κατέβασες ή έβαλες και ΒΔ;

    Δεν πρόκειται να παίξει χωρίς την ΒΔ του πάντως.

    Θεωρώ ότι θα ήταν καλύτερο να ψάξεις "objects in vb" στο google, παρά το custom classes. Μάθε λίγο για τα βασικά του αντικειμενοστρεφούς προγραμματισμού στην vb και μετά θα σου έρθουν πιο καλά.

    Το θέμα της σύνδεσης με την βάση πάντως είναι άλλο καπέλο.

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  17-02-2011, 16:06 63356 σε απάντηση της 63354

    Απ: Tutorial με Custom VB Class

    Πρώτα να σε ευχαριστήσω για την βοήθεια σου. Έχω SQL Server 2008 Express εγκατεστημένο, και αυτό που κατέβασα τα είχε όλα (ΒΔ, SP), το όνομα της βάσης είναι σωστό(mdf και όχι mdb). Αυτό που θέλω να κάνω είναι να αποθηκεύονται τα labeltext data στον SQL. Αργότερα να μπορώ να διαβάσω τα data από τον SQL και να τα εμφανίσω σε labes. Σίγουρα υπάρχουν αρκετοί τρόποι για να γίνει αυτό, απλά θεώρησα ότι μια custom class είναι αυτό που χρειάζομαι. Εσύ όμως μου λες να ρίξω μια ματιά για "objects in vb". Θα το κοιτάξω και αν είναι τα ξαναλέμε.


    Dionisis
  •  17-02-2011, 17:02 63357 σε απάντηση της 63356

    Απ: Tutorial με Custom VB Class

    Θα ρίξω πάντως και μια ματιά στο tutorial και θα σου πω.
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  17-02-2011, 18:40 63359 σε απάντηση της 63354

    Απ: Tutorial με Custom VB Class

    Δήμο, υπήρχε θέμα με το connectionstring, το διόρθωσα και παίζει μια χαρά.  

    dimos.homatas:
    Θεωρώ ότι θα ήταν καλύτερο να ψάξεις "objects in vb" στο google, παρά το custom classes. Μάθε λίγο για τα βασικά του αντικειμενοστρεφούς προγραμματισμού στην vb και μετά θα σου έρθουν πιο καλά.

    Αυτό που μου λες, αν κατάλαβα καλά, είναι να μάθω περί αντικειμενοστρεφούς προγραμματισμού πρώτα και μετά να προχωρήσω σε custom classes;


    Dionisis
  •  18-02-2011, 01:20 63371 σε απάντηση της 63359

    Απ: Tutorial με Custom VB Class

    Είναι το ίδιο πράγμα, κλάση=αντικείμενο. Είναι η εξέλιξη των σύνθετων δομών δεδομένων.

    Πχ μπορείς να φτιάξεις αντικείμενο "πελάτης", "προμηθευτής", "προϊόν" κλπ.

    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  18-02-2011, 11:55 63378 σε απάντηση της 63371

    Απ: Tutorial με Custom VB Class

    Δεν είναι έτσι ακριβώς.. μια κλάση δεν σημαινεί αναγκαστικά ότι θα γίνει και αντικείμενο.. αντικείμενα έχεις μετά το instantiation μιας κλάσης (όχι απαραίτητα, αλλά εδώ μιλάμε για basic, let's stick with that). Class είναι το blueprint ενός πχ σπιτιού αλλά το σπίτι που προκύπτει απο το blueprint είναι το αντικείμενο.


    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  18-02-2011, 12:11 63381 σε απάντηση της 63378

    Απ: Tutorial με Custom VB Class

    Το λέω με το σκεπτικό ότι για τον Νεοκλή δεν έχει σημασία, εννοώντας ότι καλό είναι να ασχοληθεί με τον OOP και όχι με την έννοια "custom class", μιας και εάν μάθει τα βασικά του αντικειμενοστρεφούς, θα υπερκαλυφθεί στο ερώτημά του. Απλά δεν είναι short term.
    "When the darkness rises up from inside - that is normal.
    It's when you reach down to pull it up - that the noxious warnings sound."
    Tuzak, Farscape
  •  21-02-2011, 00:01 63441 σε απάντηση της 63351

    Απ: Tutorial με Custom VB Class

    Μπορείς να βγάλεις το Shared function InsertPerson από το class και νά το βάλεις σε ένα module πχ modPerson (αφαιρώντας το Shared) και να το καλείς από εκεί (modPerson.InsertPerson).

    Αντί όμως να φτιάχνεις modules (κακή κληρονομιά από την VB6) και να βάζεις εκεί τις συναρτήσεις που θέλεις, (στην ουσία σε έναν κουβά) το .NET σου επιτρέπει να ομαδοποιείς τις συναρτήσεις  που αφορούν το κάθε αντικείμενο μέσα στο ίδιο το class (σαν Shared) οι οποίες (σε γενικές γραμμές) κάνουν το ίδιο πράγμα και διευκολύνουν εσένα και οποιονδήποτε άλλον που γράφει κώδικα στο να μήν ψάχνει μέσα σε modules που δυστυχώς τρώνε μνήμη είτε χρησιμοποιούνται είτε όχι.

    Τα shared methods και τα functions από modules δεν χρειάζονται new γιά να κληθούν και γιά αυτόν τον λόγο αντί να γράφεις Dim a as new Person a.InsertPesron λές Person.InsertPerson αφού το InsertPerson είναι μία συνάρτηση που δεν χρειάζεται Instance του class (Person Object) γιά να κληθεί.

    Θα μπορούσες φυσικά να φτιάξεις στην Class Person ενα method InsertPerson (χωρίς Shared) αλλά έτσι με κάθε new θα γεμίζεις την μνήμη με άχρηστα functions  τα οποία δεν χρειάζεται να είναι μοναδικά ανά instance αλλά κοινά σε όλα τα Person.

    Αν θέλεις τρέξε τον παρακάτω κώδικα που μπορεί να σε βοηθήσει στην κατανόηση του Shared vs module. Χρησιμοποιώ επίσης και αρκετές ευκολίες του .Net που ίσως σε βοηθήσουν στο project σου.

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
     
    Option Strict On
    
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    #If DEBUG Then
            ' Δεν χρειάζεται να βάζουμε πάντα breakpoints στο .net από το IDE
            ' γίνεται και από κώδικα
            If Debugger.IsAttached Then Debugger.Break()
    #End If
    
            Dim a As New PersonWithModuleInsert("Dimitris")
            Dim b As New PersonWithSharedInsert("Giorgos", 18) With {.Telephone = "(+30) 210 78459345"} ' ή αλλιώς b.Telephone = "(+30) 210 78459345"
            Dim c As New PersonWithInstanceInsert("Panagiotis", 22)
    
            ' κάνε nouse Hover (όταν κάνεις debug) πάνω από κάθε object (a, b ,c) γιά να δεις τις επιπλέον πληροφορίες που προσθέσαμε.
    
    #If DEBUG Then
            Debug.WriteLine(CType(a, String))
            Debug.WriteLine(a.ToString())
    #End If
            ' Που είναι το module που κάνει insert το Person στην βάση; Ουφ το βρήκα επιτέλους :)
            ModPersonTools.Insert(a)
    
            ' Αντί να ψάχνεις το Module με τις συναρτήσεις γιά το κάθε Person το έχεις έτοιμο από το class Person_WithSharedInsert
            PersonWithSharedInsert.Insert(b)
    
            ' Τι;, κάθε φορά θα "σηκώνω" ένα function στην μνήμη (μετά από κάθε new Instance) γιά να κάνει Insert; γιατί;
            c.Insert()
        End Sub
    End Class ' Form1
    
    
    
    Public Enum Sex
        Male
        Female
        Unknown
    End Enum ' Sex
    
    
    
    Public MustInherit Class Human
        Public Property Age As Integer
        Public Property Sex As Sex = Sex.Unknown
    
    End Class ' Human
    
    
    
    Public MustInherit Class PersonBase
        Inherits Human
    
    #Region "public:"
        Public Property Name As String
        Public Property Telephone As String
    
        Public Shared Narrowing Operator CType(ByVal person As PersonBase) As String
            Return PersonBase._Info(person)
        End Operator
    
        ' Αυτό το function είναι κληρονομημένο από το Object.
        ' Όταν κάνεις debug θα δεις επίσης ότι σου δίνει και άλλες πληροφορίες που κάνουν
        ' την δουλεία σου ευκολότερη χωρίς να χρειάζεται να κάνεις expand το κάθε person class 
        ' όταν κάνεις mouse hover
        Public Overrides Function ToString() As String
            Return "Type Info: " & MyBase.ToString() & " " & PersonBase._Info(Me)
        End Function
    
        Public ReadOnly Property Identity As String
            Get
                Return _Identity
            End Get
        End Property
    #End Region
    
    
    
    #Region "protected:"
        Protected Sub New(ByVal name As String)
            Me._CommonConstructor(name)
        End Sub
    
        Protected Sub New(ByVal name As String, ByVal age As Integer)
            MyBase.Age = age
    
            Me._CommonConstructor(name)
        End Sub
    #End Region
    
    
    
    #Region "private:"
        Private Sub _CommonConstructor(ByVal Name As String)
            Me._Name = Name
    
            _ID += 1I
            Me._Identity = _PREFIX & _ID.ToString(System.Globalization.CultureInfo.InvariantCulture)
        End Sub
    
        Private Const _PREFIX As String = "PERSON_"
        Private _Identity As String = String.Empty
    
        ' Δοκίμασε να βγάλεις το Shared
        ' τότε Όλα τα Objects θα έχουν ID 0 :(
        Private Shared _ID As Integer = 0
    
        Private Shared Function _Info(ByVal person As PersonBase) As String
            Dim sb As New System.Text.StringBuilder
            Dim sInfo As String = Nothing
    
            sb.Append("ID: ").Append(person.Identity)
            sb.Append(", Name: ").Append(person.Name)
            sb.Append(", Sex: ").Append(person.Sex.ToString)
            sb.Append(", Age: ").Append(person.Age)
            sb.Append(", Telephone: ").Append(person.Telephone)
    
            sInfo = sb.ToString
            sb.Clear()
            sb = Nothing
    
            Return sInfo
        End Function
    #End Region
    
    End Class ' PersonBase
    
    
    
    Public Class PersonWithModuleInsert
        Inherits PersonBase
    
        Public Sub New(ByVal name As String)
            MyBase.new(name)
        End Sub
    
        Public Sub New(ByVal name As String, ByVal age As Integer)
            MyBase.New(name, age)
        End Sub
    
    End Class
    
    
    
    ' Γιατί να φτιάχνουμε modules
    ' που φορτώνονται στην μνήμη χωρίς να χρησιμοποιούνται;
    Public Module ModPersonTools
        Public Function Insert(ByVal thePerson As PersonBase) As Integer
            ' TODO insert to DB
            Return 1
        End Function
    
    End Module ' ModPersonTools
    
    
    
    ' Αυτός ο τρόπος είναι κατά την γνώμη μου ο καλύτερος 
    Public Class PersonWithSharedInsert
        Inherits PersonBase
    
        Public Sub New(ByVal name As String)
            MyBase.new(name)
        End Sub
    
        Public Sub New(ByVal name As String, ByVal age As Integer)
            MyBase.New(name, age)
        End Sub
    
        Public Shared Function Insert(ByVal thePerson As PersonBase) As Integer
            ' TODO insert to DB
            Return 1
        End Function
    
    End Class ' PersonWithSharedInsert
    
    
    
    Public Class PersonWithInstanceInsert
        Inherits PersonBase
    
        Public Sub New(ByVal name As String)
            MyBase.new(name)
        End Sub
    
        Public Sub New(ByVal name As String, ByVal age As Integer)
            MyBase.New(name, age)
        End Sub
    
        Public Function Insert() As Integer
            ' TODO insert to DB
            Return 1
        End Function
    End Class ' PersonWithInstanceInsert

     

     

     

     

     

     

  •  24-02-2011, 22:30 63703 σε απάντηση της 63441

    Απ: Tutorial με Custom VB Class

    Libra Storm:
    Αν θέλεις τρέξε τον παρακάτω κώδικα που μπορεί να σε βοηθήσει στην κατανόηση του Shared vs module. Χρησιμοποιώ επίσης και αρκετές ευκολίες του .Net που ίσως σε βοηθήσουν στο project σου.

    Αν θελω...; Φυσικά και θέλω...!

    Σε ευχαριστώ πολύ για τον κόπο που έκανες να μου παρουσιάσεις shared methods vs functions από modules. Τι να πω... και πάλι σε ευχαριστώ..


    Dionisis
  •  25-02-2011, 10:35 63717 σε απάντηση της 63703

    Απ: Tutorial με Custom VB Class

    Πήγα να τρέξω τον κώδικα αλλά δυστυχώς χτυπάει errors.

    Error             1                     'Telephone' is not a member of 'WindowsApplication1.PersonWithSharedInsert'.     C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        12                  67                  WindowsApplication1

    Error             2                     Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.   C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        43                  21                  WindowsApplication1

    Error             3                     Statement cannot appear within a property body. End of property assumed.               C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        44                  5                     WindowsApplication1

    Error             4                     Property missing 'End Property'.                      C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                   44                        5                     WindowsApplication1

    Error             5                     Property without a 'ReadOnly' or 'WriteOnly' specifier must provide both a 'Get' and a 'Set'.   C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        54                  21                  WindowsApplication1

    Error             6                     Statement cannot appear within a property body. End of property assumed.               C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        55                  5                     WindowsApplication1

    Error             7                     Statement cannot appear within a property body. End of property assumed.               C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        57                  5                     WindowsApplication1

    Error             8                     '_Name' is not a member of 'WindowsApplication1.PersonBase'.                    C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        94                  9                     WindowsApplication1

    Error             9                     'Sex' is not a member of 'WindowsApplication1.PersonBase'.    C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        113               37                  WindowsApplication1

    Error             10                  'Telephone' is not a member of 'WindowsApplication1.PersonBase'.           C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        115               43                  WindowsApplication1

    Error             11                  'Clear' is not a member of 'System.Text.StringBuilder'.                   C:\Users\neoklis\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb                        118               9                     WindowsApplication1

     


    Dionisis
  •  25-02-2011, 22:44 63785 σε απάντηση της 63717

    Απ: Tutorial με Custom VB Class

    Είναι Windows application γιά visual Studio 2010 με framework 4. Γιά  αυτόν τον λόγο σου βγάζει αυτά τα μυνήματα λάθους. Παλιά στα properties έπρεπε πάντα να έχεις δηλωμένο ένα get και set, μιά private μεταβλητή γιά κάθε property είτε έγραφες κώδικα στα get και set είτε όχι.

  •  26-02-2011, 09:41 63789 σε απάντηση της 63785

    Απ: Tutorial με Custom VB Class

    το υποψιαζόμουνα ότι έχει να κάνει με το framework. Έχω εγκατεστημένο visual studio 2008, θα πρέπει να παίξει...
    Dionisis
Σελίδα 1 από 2 (18 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems