我在创建活动登录面板时遇到问题。切中要害! 我想创建一个登录面板,客户必须在其中登录系统,下面我向您展示我拥有的表格。
- 如果客户端提供PESEL和密码并且存在于数据库中,则可以登录。
阿拉伯数字。 如果客户提供的PESEL不正确,那么他/她将不得不弹出窗口,显示"PESEL无效或不存在"的信息。
- 这里的问题从我开始......我想做类似的事情,如果一个之前注册并添加到数据库的客户, 已经弹出了带有消息"您已注册"的窗口 - 现在在登录面板中仅输入 PESEL,然后创建密码。">
进入登录面板后,客户端第一次只需要输入正确的PESEL,登录表单会检查给定的PESEL是否存在并分配了密码, 如果没有,请使用新密码打开表单窗口并重复此操作。此密码将添加到先前提供 PESEL 的数据库中。
我的工作:
- 对于登录面板:
在此处输入图像描述
登录面板代码:
using System.Linq;
using System.Windows;
using eDoctor.Functions;
namespace eDoctor
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
eDoctorEntities entities = new eDoctorEntities();
Password password = new Password();
Pacjent pacjent;
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string PeselTextBox = Pesel.Text;
string PassCheck = Passwd.Password;
if (!string.IsNullOrWhiteSpace(PeselTextBox))
{
if (!PeselTextBox.VPesel())
{
MessageBox.Show("PESEL nieprawidłowy lub nie istnieje");
}
if (string.IsNullOrEmpty(PassCheck))
{
if (entities.Pacjent.Any(x => x.Pesel == PeselTextBox))
{
Password pass = new Password();
pass.passwd1.Text = "";
pass.Show();
pacjent.Pesel = password.CheckPasswd(PeselTextBox);
}
}
else
{
MessageBox.Show("Hasło nieprawidłowe");
}
}
else if (string.IsNullOrEmpty(PeselTextBox))
{
MessageBox.Show("Pole PESEL jest pusty, proszę uzupełnić");
}
else
{
MessageBox.Show("PESEL jest pusty, proszę uzupełnić dane");
}
}
private void Button_Click_Register(object sender, RoutedEventArgs e)
{
Register register = new Register();
register.Show();
}
}
}
对于面板新密码:
在此处输入图像描述
法典:
using System;
using System.Security.Cryptography;
using System.Text;
using System.Windows;
using System.Windows.Controls;
namespace eDoctor
{
/// <summary>
/// Interaction logic for Password.xaml
/// </summary>
public partial class Password : Window
{
Pacjent model = new Pacjent();
public TextBox PasswordBox;
string pswd;
public Password()
{
InitializeComponent();
PasswordBox = passwd1;
}
private void SendPassw_Click(object sender, RoutedEventArgs e)
{
CheckPasswd(pswd);
}
static string GetMD5Hash(string input)
{
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
UTF8Encoding utf8 = new UTF8Encoding();
byte[] data = md5.ComputeHash(utf8.GetBytes(input));
return Convert.ToBase64String(data);
}
}
public string CheckPasswd(string pswd)
{
if (passwd1.Text == passwd2.Text)
{
if (string.IsNullOrEmpty(passwd1.Text) || string.IsNullOrEmpty(passwd2.Text))
{
MessageBox.Show("The field can not be empty!);
}
var result = GetMD5Hash(passwd2.Text);
var query = $"UPDATE Pacjent SET ShashowaneHaslo = '{result}' WHERE Pesel='{pswd}'";
using (eDoctorEntities db = new eDoctorEntities())
{
db.Database.ExecuteSqlCommand(query);
}
}
else
{
MessageBox.Show("The given passwords are not the same, enter the password again!");
}
return pswd;
}
}
}
模型数据库:
在此处输入图像描述
我没有进行注册,因为它有效,您可以在注册表中添加记录,只是不幸的是更新数据并向数据库添加密码存在问题,登录期间给出密码的 PESEL 在哪里。怎么办?也许还有其他更好的解决方案?
从调试:
我运行该程序并尝试在登录中写入PESEL,单击Enter,创建以创建新密码,但立即收到"字段不能为空"的消息,我按"确定"并出错。
错误程序:
System.NullReferenceException:"对象引用尚未设置为对象的实例。 Pacjent 为空。
普拉斯帮帮我。
对象Pacjent pacjent;
以MainWindow
声明,但从未初始化。在行pacjent.Pesel
之前,应初始化对象 pacjent。不确定,pacjent
是什么类型的对象。如果是POCO模型,则初始化并将其声明为
`Pacjent pacjent = new Pacjent ()`;