我的Staff
SQLite数据库中有一个表名PosMain
,该表名包含属性StaffId
,StaffName
我有一个名为LoginWindows
的窗口,其功能类似于一个Login
的文本框的txtStaffId
页面。
我想要的是,当用户在txtStaffId
中键入其ID时,系统将检查其ID是否存在于表Staff
中。如果存在,则系统将转到我的主窗口PosWindows
并获取其数据,例如StaffId
和StaffName
。
问题是我找不到一种方法来检查txtStaffId
中的ID密钥是否存在。
我使用了这段代码,但是由于我正在使用FirstOrDefault
,因此它仅获取表中的第一个数据。这段代码位于我的业务层,名为SalesmanBo
public int GetStaffId(int staffId)
{
try
{
using (PosMainDBContext db = new PosMainDBContext())
{
return db.Staff.Select(s => s.StaffId).FirstOrDefault();
}
}
catch (Exception ex)
{
CustomExceptionHandling customExceptionHandling = new CustomExceptionHandling();
customExceptionHandling.CustomExHandling(ex.ToString());
return 0;
}
}
这是我LoginWindows
上登录的代码
private void txtStaffId_KeyDown(object sender, KeyEventArgs e)
{
try
{
SalesmanBO salesmanBO = new SalesmanBO();
Staff staff = new Staff();
if (e.Key == Key.Return)
{
if (!string.IsNullOrEmpty(txtStaffId.Text))
{
int salesmanId = Int32.Parse(txtStaffId.Text);
int staffId = salesmanBO.GetStaffId(staff.StaffId);
if (salesmanId == staffId )
{
PosWindows posWindows = new PosWindows();
posWindows.Show();
this.Close();
}
else
{
MessageBox.Show("ID not Valid", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
else
{
MessageBox.Show("Please Key In your ID", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
}
catch (Exception ex)
{
CustomExceptionHandling customExceptionHandling = new CustomExceptionHandling();
customExceptionHandling.CustomExHandling(ex.ToString());
}
}
您能帮我吗?我是WPF和SQLITE的新手
答案 0 :(得分:1)
您提供的代码中有很多错误的地方。例如,您以staffId
方法传递了GetStaffId
,但从未使用过。我建议检查Staff
实体而不是仅检查staffId
,因为它可以进一步使用。检查以下改进版本以了解一些想法。
public Staff GetStaffById(int staffId)
{
try
{
using (PosMainDBContext db = new PosMainDBContext())
{
return db.Staff.Where(s => s.StaffId == staffId).FirstOrDefault();
}
catch (Exception ex)
{
CustomExceptionHandling customExceptionHandling = new CustomExceptionHandling();
customExceptionHandling.CustomExHandling(ex.ToString());
return null; // changed return 0 to return null
}
}
}
在txtStaffId_KeyDown
事件中更改以下代码行。
if (!string.IsNullOrEmpty(txtStaffId.Text))
{
int salesmanId = Int32.Parse(txtStaffId.Text);
staff = salesmanBO.GetStaffById(salesmanId);
if (staff!=null) // no need to check salesmanId == staff.StaffId as we already checked while querying it.
{
PosWindows posWindows = new PosWindows();
posWindows.Show();
this.Close();
}
else
{
MessageBox.Show("ID not Valid", "Alert", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
更新
在GetStaffById
方法中,将返回类型更改为return null
;
无需创建新的Staff
实例。将Staff staff = new Staff();
更改为Staff staff;