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

 

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

Φορμες και γέμισμα απο την βαση

Îåêßíçóå áðü ôï ìÝëïò Sheik. Τελευταία δημοσίευση από το μέλος pap στις 09-02-2009, 22:15. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  09-02-2009, 10:56 48296

    Φορμες και γέμισμα απο την βαση

    Καλημερα παιδια.Ειμαι καινουριος εδω, οπως και γενικα στο VS 2008(C#).
    Εχω ενα προτζεκτ στην Τεχνολογια Λογισμικου , να φτιαξω ενα συστημα διαχειρισης προσωπικου σε εταιρια, δηλαδη καρτελες υπαλληλων, στοιχεια τους,μισθοι, αδειες κλπ

    Μεχρι στιγμης εχω 3 φορμες, μια login screen, μια main screen και μια η οποια ειναι η καρτελα του υπαλληλου.


    Αυτο που θελω να κανω ειναι το εξης. Αρχικα, στην login screen να δινω username & password, να τα ψαχνει στην βαση και αν υπαρχει ο συνδυασμος να μεταφερομαι στην main form, οπου υπαρχουν διαθεσιμες καποιες επιλογες.Αυτο το εχω κανει και δουλευει μια χαρα.
    Στην mainform τωρα, εχω ενα button "Προβολη Προσωπικης Καρτελα Υπαλληλου" το οποιο μολις το παταω, θελω να με πηγαινει στην 3η φορμα και αναλογα με το ποιος εκανε το login, να γεμιζει τα στοιχεια της φορμας, απο την βαση.

    Μπορειτε να μου δωσετε μια λυση, καποιες υποδειξεις ωστε να προχωρησω???

    Τελος να πω, οτι δοκιμασα να κανω ενα detail view στην 3η φορμα(οχι datagrid) απο εναν πινακα της βασης πανω στην καρτελα, αλλα οπως ειναι φυσικο μου εμφανιζει τα στοιχεια ολων των υπαλληλων(οταν λεω ολων εννοω οτι απλα γινονται διαθεσιμα ολα, πατωντας απλα το βελακι απο τον navigator).Εγω αυτο που θελω οπως ειπα, ειναι να γεμιζουν τα πεδια με τα στοιχεια αυτου που εκανε login, 2 φορμες πριν.

    Ευχαριστω πολυ.
  •  09-02-2009, 12:14 48300 σε απάντηση της 48296

    Απ: Φορμες και γέμισμα απο την βαση

    Καλημέρα,
    Κοίταξε να δεις σε αυτό το Link γενικά πως να χρησιμοποιέις winforms και δεδομένα απο βάση http://windowsclient.net/learn/video.aspx?v=52573. Επίσης για να εμφανίζει μόνο τα στοιχεία του υπαλλήλου που έκανε Login θα κάνεις στο binding source και ιδικότερα στην μέθοδο filter παιρνόντας σαν workerID το id του υπαλλήλου.
    π.χ

    Workers.WorkerBindingSource.Filter() = "workerID =" & workerID & ""
  •  09-02-2009, 14:01 48305 σε απάντηση της 48300

    Απ: Φορμες και γέμισμα απο την βαση

    Mαλιστα.Θα δω τα βιντεακια αυτα και θα ενημερωσω εαν με βοηθησουν.

    Κατι που ειχα σκεφτει να κανω, αλλα δεν ξερω πως, ειναι να περναω σαν παραμετρο το ID του υπαλληλου απο την μια φορμα στην αλλη, αλλα μπερδευτηκα διοτι η βαση που εκανα εχει πολλους πινακες, και νομιζω οτι απλα το ID δεν θα με βοηθουσε και πολυ και πως πρεπει να περασω πολλες παραμετρους...
  •  09-02-2009, 14:10 48306 σε απάντηση της 48305

    Απ: Φορμες και γέμισμα απο την βαση

    Λογικά κάθε υπάλληλος του πίνακά σου έχει και ένα μοναδικό ID, άσχετα με πόσους πίνακες μπορεί να έχει σύνδεση. Περνώντας το ID του υπαλλήλου απο την μία φόρμα στην άλλη με παράμετρους μπορείς να επιτύχης το αποτέλεσμα που θέλεις. Για οτιδήποτε άλλο εδώ είμαστε...
  •  09-02-2009, 17:59 48314 σε απάντηση της 48306

    Απ: Φορμες και γέμισμα απο την βαση

    Για roleBased Security ρίξε μία ματία στο Namespace System.Security.Principal

    Παρακάτω σου δίνω μία απλή υλοποίηση με την χρήση GenericIdentity & GenericPrincipal.


    Για να κάνεις LogIn :
     Authendication.Login(Me.UsernameTextBox.Text, Me.PasswordTextBox.Text)

    Για να ελέγξεις αν κάποιος χρήστης έχει κάνει Login :
     Thread.CurrentPrincipal.Identity.IsAuthenticated

     

    Για να επιστρέψεις δεδομένα κάποιου χρήστη:
     sqlCommand.Parameters.AddWithValue("@UserName", Thread.CurrentPrincipal.Identity.Name)
     sqlCommand.CommandText="Select * from SomeTable where UserName=@UserName"


     


    Για να ελέγξεις αν ο χρήστης ανήκει σε κάποιο role :
     Thread.CurrentPrincipal.IsInRole ("SomeRoleLikeCanEditCustomer"))
     

     

     

     

    Sample code:

    Φτιάξε στην Βάση δεδομένων σου τους παρακάτω 2 πίνακες :

    CREATE TABLE [dbo].[User](
     [UserName] [nvarchar](20) NOT NULL,
     [Password] [nvarchar](20) NOT NULL,
     CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
    (
     [UserName] ASC
    )
    ) ON [PRIMARY]
    GO

    CREATE TABLE [dbo].[UserRole](
     [Role] [nchar](64) NOT NULL,
     [UserName] [nvarchar](20) NOT NULL,
     CONSTRAINT [PK_UserRole] PRIMARY KEY CLUSTERED
    (
     [Role] ASC,
     [UserName] ASC
    )
    ) ON [PRIMARY]
    GO

    ALTER TABLE [dbo].[UserRole]  WITH CHECK ADD  CONSTRAINT [FK_UserRole_User] FOREIGN KEY([UserName])
    REFERENCES [dbo].[User] ([UserName])
    ON UPDATE CASCADE
    ON DELETE CASCADE
    GO
    ALTER TABLE [dbo].[UserRole] CHECK CONSTRAINT [FK_UserRole_User]
    GO

     

    Φτιάξε ένα stored procedure που θα χρησιμοποιείς για να κάνεις Login.

     


    Create PROCEDURE [dbo].[Login]
     (
     @UserName nvarchar(20),
     @Password nvarchar(20)
     )
    AS
     SELECT u.UserName FROM [User] u WHERE u.UserName=@UserName and u.Password=@Password;   
     SELECT r.[Role],r.[UserName] FROM [UserRole] r WHERE r.UserName=@UserName;

     

     


    χρησιμοποίησε κώδικα όπως παρακάτω για να κάνεις LogIn:


    Imports System.Security.Principal
    Imports System.Threading

    Public Class Authendication

        Public Shared Function IsAuthenticated() As Boolean
            Return Thread.CurrentPrincipal.Identity.IsAuthenticated
        End Function

        Public Shared Sub Login(ByVal userName As String, ByVal password As String)
            Dim cnn As SqlClient.SqlConnection = Nothing
            Dim cmd As SqlClient.SqlCommand = Nothing
            Dim rdr As SqlClient.SqlDataReader = Nothing
            Dim identity As GenericIdentity = Nothing
            Dim principal As GenericPrincipal = Nothing
            Dim roles As List(Of String) = Nothing

            Try

                cnn = New SqlClient.SqlConnection(My.Settings.connectionString)
                cmd = cnn.CreateCommand

                With cmd
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "Login"
                    .Parameters.AddWithValue("@UserName", userName)
                    .Parameters.AddWithValue("@Password", password)
                End With
                cnn.Open()

                rdr = cmd.ExecuteReader

                While rdr.Read

                    If Not rdr(0) Is System.DBNull.Value Then
                        identity = New GenericIdentity(rdr(0))
                    End If
                End While


                If identity Is Nothing Then
                    Thread.CurrentPrincipal = Nothing
                    Exit Sub
                End If


                roles = New List(Of String)


                If rdr.NextResult Then
                    While rdr.Read
                        roles.Add(rdr("Role"))
                    End While
                End If


                principal = New GenericPrincipal(identity, roles.ToArray)
                Thread.CurrentPrincipal = principal

            Catch ex As Exception
                Throw ex
            Finally
                cnn.Close()
            End Try

        End Sub
    End Class

     

     

     

     

     

     

     


    Μπλουγουράς Γιάννης
    Wizcom O.E.
  •  09-02-2009, 18:37 48316 σε απάντηση της 48314

    Απ: Φορμες και γέμισμα απο την βαση

    Eυχαριστω φιλε αλλα το login το εχω κανει ηδη και δουλευει, χωρις stored procedures κλπ, διοτι δεν τα καταλαβαινω κιολας.Thanks παντως για τον κοπο σου.

    Το προβλημα μου τωρα ειναι το εξης.Καταφερα και περασα σαν παραμετρο το ID του υπαλληλου που κανει login, στην 2η και στη συνεχεια στην 3η φορμα οπου και την χρειαζομαι για να εμφανισω τα στοιχεια του.
    Εκανα drag&drop ως detail view τα στοιχεια ενος πινακα(απο τους πολλους) και αυτο που θελω ειναι να μου γεμισει τα textboxes μονο με τα στοιχεια του υπαλληλου με το ID που περασα προηγουμενως.

    Υ.Γ Αν καταλαβα καλα ο παραπανω κωδικας ηταν σε visual basic, σωστα?Αν ειναι ευκολο να ειναι σε επομενες απαντησεις σε C# θα ηταν καλυτερα.
    Ευχαριστω και παλι
  •  09-02-2009, 20:02 48317 σε απάντηση της 48316

    Απ: Φορμες και γέμισμα απο την βαση

    Τα δεδομένα σου δεν εμφανίζονται μαγικά στην φόρμα για όλους τους χρήστες.

    Ψάξε να βρείς πού και με ποίο command καλεί την Βάση δεδομένων. Εκεί στο commandText περνάς  το Id για να φέρεις αποτελέσματα μόνο για συγκεκριμένο χρήστη.

    Υ.Γ. Δεν είναι αποτελεσματικό να περνάς το UserId από φόρμα σε φόρμα. Κράτησε το Public σε κάποια μεταβλητή για να έχεις πρόσβαση από όλα τα αντικείμενα του προγράμματος. Μελέτησε τον παραπάνω κώδικα, Το UserName το κρατάει στο Thread.CurrentPrincipal.Identity.Name.

     


    Μπλουγουράς Γιάννης
    Wizcom O.E.
  •  09-02-2009, 22:15 48321 σε απάντηση της 48316

    Απ: Φορμες και γέμισμα απο την βαση

    Αν θες απλά να πάρεις πχ. το επώνυμο του υπάλληλου μπορείς να γράψεις και αυτό σε μια public class:

    public string GetLastName(int empId)
    {
        string lastName= "";
        SqlCommand cmd = new SqlCommand();
       
        cmd .Connection = con; // connection object - το οποίο είναι το αντικείμενό που συνδέει την εφαρμογή με τη database
        cmd .CommandText = @"
    SELECT lastName
    FROM Employee
    WHERE employeeId= " + empId;
               
        SqlDataReader rd = cmd.ExecuteReader();
        while (rd.Read())
        {
            try
            {
                lastName= rd.GetString(0);
            }
            catch (Exception ex)
            {
                       // do something....
            }
        }
        rd.Close();
        return lastName;
    }

    Και στη φόρμα σου λες...

    // code.....

    private Employee _employee = new Employee();

    txtLastName.Text = _employee.GetLastName(_id);

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