0
votes

Comment transmettez-vous une valeur au contrôle de l'utilisateur à partir d'une winform?

J'ai un formulaire d'inscription, un formulaire de connexion et une forme principale.Le programme commence par le formulaire d'inscription. Si je vous inscrit, la chargement des données (nom, email, mot de passe) jusqu'à la base de données locale. Lorsque je me connecte, montrez correctement la forme principale. La forme principale a un usercontrol avec une étiquette. Je voudrais écrire un texte de bienvenue à l'étiquette avec elle / son nom. Exemple: "Bienvenue Josh!". Donc, je devrais identifier l'utilisateur, donc j'utilise le texte textboxemail.text à partir du formulaire de connexion. Ma solution ne fonctionne pas. Il y a mon code:

namespace personalFinance
{
    public partial class HomepageUC : UserControl
    {
       string login = "";
       public HomepageUC(string email)
          {

            InitializeComponent();
            login = email;
            var conn = new SqlConnection(@"Server=(localdb)\MSSQLLocalDB; 
            AttachDbFileName=|DataDirectory|database.mdf;");
            conn.Open();
            var cmd = new SqlCommand($"SELECT email FROM registration_data 
            WHERE email = '{login}'", conn);
            var reader = cmd.ExecuteReader();
            while (reader.Read()) labelWelcome.Text = reader[0].ToString();
          }
     }

 }


6 commentaires

Vous avez une vulnérabilité d'injection SQL.


Avant d'écrire une autre ligne de code, vous devez lire sur SQL Injection. Votre code est grand ouvert. Mon ami Bobblier Tables aime ce genre de chose. Vous devez également envelopper vos objets de commande et de connexion (et de tout autre objet implémentant Idisposable) dans une déclaration en utilisant. Le code que vous avez ici va manger votre pool de connexion lorsque plusieurs personnes utilisent cette application.


Merci pour l'aide!


Ajout d'une réponse avec le paramètre + un meilleur constructeur + disposition correcte. J'encourageais la lecture sur une) injection SQL. b) Ressources non gérées (Idisposables)


Vous voulez probablement changer ce Sélectionnez E-mail de ... à Sélectionnez Nom d'utilisateur à partir de ...


@ Bradbury9, oui j'ai vu ça. Je le change maintenant.


3 Réponses :


0
votes

Le concepteur WinForms crée des contrôles utilisateur en appelant leur constructeur par défaut. Par conséquent, vous ne pouvez pas définir un constructeur personnalisé comme celui-là.

Au lieu de cela, vous devez créer une propriété personnalisée.


0 commentaires

0
votes

est le champ email unique? Avez-vous déjà débogué? Se produit une erreur? Peut-être que la requête a apporté plus d'un enregistrement ou pas d'enregistrement, et peut-être que le champ était vide aussi. Essayez ceci: xxx


0 commentaires

0
votes

Vous devez utiliser des requêtes paramétrées et utiliser une bonne utilisation des ressources non gérées. Une astuce facile et rapide à Idisposable est le Mot clé xxx

}


2 commentaires

Merci, le programme ne reçoit pas le message d'erreur maintenant, mais maintenant dans Labelwelcome ne montre pas les données. Il affiche le texte de la étiquette de base et non les données de la base de données.


Votre code est-il exécuté? Vérifiez Utilisation d'un débogueur