面板登录不适用于 WPF 中的实体框架



我在创建活动登录面板时遇到问题。切中要害! 我想创建一个登录面板,客户必须在其中登录系统,下面我向您展示我拥有的表格。

  1. 如果客户端提供PESEL和密码并且存在于数据库中,则可以登录。

阿拉伯数字。 如果客户提供的PESEL不正确,那么他/她将不得不弹出窗口,显示"PESEL无效或不存在"的信息。

  1. 这里的问题从我开始......我想做类似的事情,如果一个之前注册并添加到数据库的客户, 已经弹出了带有消息"您已注册"的窗口 - 现在在登录面板中仅输入 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 ()`; 

最新更新