【问题标题】:Check whether username is already in database检查用户名是否已经在数据库中
【发布时间】:2019-05-31 13:23:16
【问题描述】:

我正在创建一个可以创建新帐户的帮助台。如果用户名已经在数据库中,您应该会收到一条消息,告诉您使用另一个用户名。 如果用户名正确,密码必须在数据输入数据库之前提供哈希。

我已经通过互联网搜索了答案,但我没有找到任何适用于我的程序的内容。

//Declaratie private variabelen
        private int _klantnummer;
        private string _gebruikersnaam, _voornaam, _achternaam, _straatEnNummer, _postcode, _gemeente, _telefoonnummer, _email, _wachtwoord;
        private bool _admin;

        //Publieke eigenschappen
        private int Klantnummer
        {
            get { return _klantnummer; }
            set { _klantnummer = value; }
        }

        public string Gebruikersnaam
        {
            get { return _gebruikersnaam; }
            set { _gebruikersnaam = value; }
        }

        public string Voornaam
        {
            get { return _voornaam; }
            set { _voornaam = value; }
        }

        public string Achternaam
        {
            get { return _achternaam; }
            set { _achternaam = value; }
        }

        public string StraatEnNummer
        {
            get { return _straatEnNummer; }
            set { _straatEnNummer = value; }
        }

        public string Postcode
        {
            get { return _postcode; }
            set { _postcode = value; }
        }

        public string Gemeente
        {
            get { return _gemeente; }
            set { _gemeente = value; }
        }

        public string Telefoonnummer
        {
            get { return _telefoonnummer; }
            set { _telefoonnummer = value; }
        }

        public string Email
        {
            get { return _email; }
            set { _email = value; }
        }

        public string Wachtwoord
        {
            get { return _wachtwoord; }
            set { _wachtwoord = value; }
        }

        public bool Admin
        {
            get { return _admin; }
            set { _admin = value; }
        }

        //Default Constructor
        public Klant()
        {
            Klantnummer = 0;
            Gebruikersnaam = "";
            Voornaam = "";
            Achternaam = "";
            StraatEnNummer = "";
            Postcode = "";
            Gemeente = "";
            Telefoonnummer = "";
            Email = "";
            Wachtwoord = "";
            Admin = false;
        }

        //Constructor met parameters
        public Klant (string pGebruikersnaam, string pVoornaam, string pAchternaam, string pStraatEnNummer,
            string pPostcode, string pGemeente, string pTelefoonnummer, string pEmail, string pWachtwoord,
            bool pAdmin)
        {
            this.Gebruikersnaam = pGebruikersnaam;
            this.Voornaam = pVoornaam;
            this.Achternaam = pAchternaam;
            this.StraatEnNummer = pStraatEnNummer;
            this.Postcode = pPostcode;
            this.Gemeente = pGemeente;
            this.Telefoonnummer = pTelefoonnummer;
            this.Email = pEmail;
            this.Wachtwoord = pWachtwoord;
            this.Admin = pAdmin;
        }

        //Constructor met parameters met klantnummer
        public Klant(int pKlantnummer, string pGebruikersnaam, string pVoornaam, string pAchternaam, string pStraatEnNummer,
            string pPostcode, string pGemeente, string pTelefoonnummer, string pEmail, string pWachtwoord,
            bool pAdmin)
        {
            this.Klantnummer = pKlantnummer;
            this.Gebruikersnaam = pGebruikersnaam;
            this.Voornaam = pVoornaam;
            this.Achternaam = pAchternaam;
            this.StraatEnNummer = pStraatEnNummer;
            this.Postcode = pPostcode;
            this.Gemeente = pGemeente;
            this.Telefoonnummer = pTelefoonnummer;
            this.Email = pEmail;
            this.Wachtwoord = pWachtwoord;
            this.Admin = pAdmin;
        }

【问题讨论】:

  • 您可以添加您尝试创建的任何添加/删除/CRUD 方法吗?

标签: c# mysql asp.net


【解决方案1】:

我通常做的是使用户名字段在数据库中唯一,然后在调用数据库时使用 try...catch。如果由于唯一验证错误而失败,我知道用户名已被使用并响应用户。

【讨论】:

  • @mason 您打算如何实现?
  • @mason 如果在您检查之后和插入新用户之前将用户添加到数据库中?
  • @mason 使用事务解决不了任何问题。选择不会阻止添加该用户名的新用户。因此,您提出的解决方案速度较慢,设计中内置了错误(如果/当它们出现时可能会产生极其严重的后果),并且随着用户数量的增加(如果事情进展顺利),只会随着时间的推移变得越来越糟,应用程序作为一个整体)增长,这一切都是因为您不喜欢使用异常的想法?这会适得其反。
  • “选择的目的不是为了阻止添加具有该用户名的用户,它只是检查以确保该用户名尚未被使用。”检查是否被占用的目的是防止在这种情况下添加它们。应用程序越大,出现错误的可能性就越大。即使是很小的应用程序也存在潜力。如果您想声明不需要异常,那么您需要提供一个真正解决问题的解决方案。您提出的解决方案仍然在那里留下错误。如果您可以提出另一个有效的工具...
  • @mason 为什么你认为在存在冲突的情况下数据库查询的异常会比在每个请求上执行 额外的数据库查询要慢,无论是否有没有冲突?并且声称它是不必要的,您需要提供一个解决问题的解决方案而不使用它。你还没有这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2013-03-31
  • 2019-06-19
相关资源
最近更新 更多