如何检查输入的数据在SQLite中是否存在?

时间:2019-03-28 08:28:07

标签: c# wpf sqlite

我的Staff SQLite数据库中有一个表名PosMain,该表名包含属性StaffIdStaffName

我有一个名为LoginWindows的窗口,其功能类似于一个Login的文本框的txtStaffId页面。

我想要的是,当用户在txtStaffId中键入其ID时,系统将检查其ID是否存在于表Staff中。如果存在,则系统将转到我的主窗口PosWindows并获取其数据,例如StaffIdStaffName

问题是我找不到一种方法来检查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的新手

1 个答案:

答案 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;