我正在将员工保存到SQL数据库中。我正在保存名字,姓氏,用户名和密码。我该怎么做才能防止保存多个相同的用户名?
我试过这个:
private void CreateEmployee()
{
using (var db = new TidrapportDBEntities())
{
var user = (from p
in db.Login
where p.username != null
select p).ToList();
foreach (var vUser in user)
{
if (vUser.username == textBoxUsername.Text)
{
labelSuccessFail.Visible = true;
labelSuccessFail.Text = "Accountname already exist.";
break;
}
else
{
var userInfo = new Login();
var persInfo = new PersonalInformation();
persInfo.firstname = textBoxFirstname.Text;
persInfo.lastname = textBoxLastname.Text;
userInfo.username = textBoxUsername.Text;
userInfo.password = textBoxPassword.Text;
userInfo.employeeId = persInfo.employeeId;
db.Login.Add(userInfo);
db.PersonalInformation.Add(persInfo);
db.SaveChanges();
textBoxFirstname.Text = string.Empty;
textBoxLastname.Text = string.Empty;
textBoxUsername.Text = string.Empty;
textBoxPassword.Text = string.Empty;
labelSuccessFail.Visible = true;
labelSuccessFail.Text = "Successfully created account.";
}
}
}
}
我可以尝试哪些提示?
亲切的问候, 克里斯蒂安
答案 0 :(得分:0)
您应该在用户名字段上有唯一约束。不确定您是先执行代码,先建立模型还是先在数据库中建立数据库,但您应该能够使用正确的方法谷歌如何在数据库中设置它。如果你试图保存一个,那将抛出异常,这样就确保你不能有多个。
您还可以使用LINQ语句将用户列表限制为您要创建的用户名,然后您只需检查bool以查看是否返回了行。这样你就不必阅读整个数据库表(你的“toList”正在做)。
在您的代码示例中,您将获得拥有用户名的所有用户,然后循环它们,但您的条件代码仅在第一个与您尝试的用户名匹配时才有效保存,否则你将尝试第二次重新创建一个副本。因此,为了让您的代码正常工作,您可以尝试:
private void CreateEmployee()
{
using (var db = new TidrapportDBEntities())
{
var user = (from p
in db.Login
where p.username != null
select p).ToList();
bool found = false;
foreach (var vUser in user)
{
if (vUser.username == textBoxUsername.Text)
{
found = true;
labelSuccessFail.Visible = true;
labelSuccessFail.Text = "Accountname already exist.";
break;
}
}
if(!found)
{
var userInfo = new Login();
var persInfo = new PersonalInformation();
persInfo.firstname = textBoxFirstname.Text;
persInfo.lastname = textBoxLastname.Text;
userInfo.username = textBoxUsername.Text;
userInfo.password = textBoxPassword.Text;
userInfo.employeeId = persInfo.employeeId;
db.Login.Add(userInfo);
db.PersonalInformation.Add(persInfo);
db.SaveChanges();