WPF:我如何验证内存中的数字在数据库表中没有重复?

本文关键字:数据库 数字 WPF 何验证 内存 验证 | 更新日期: 2023-09-27 18:01:36

我不知道如何确定一个数字是否重复。

现在,这个过程是当用户单击按钮浏览xml文件时,xml文件被反序列化并存储到db中,数据显示在视图上的DataGrid上。

因此,我添加了一个确认对话框,这样当用户单击browse时,代码将检查被反序列化的lot_number是否是来自数据库中表的列中的重复项。我只希望用户能够添加批号的数据库是不重复的。

下面是目前为止的代码:
public void DeSerializationStream(string filePath)
    {
        XmlRootAttribute xRoot = new XmlRootAttribute();
        xRoot.ElementName = "lot_information";
        xRoot.IsNullable = false;
        // Create an instance of lotinformation class.
        var lot = new LotInformation();
        // Create an instance of stream writer.
        TextReader txtReader = new StreamReader(filePath);
        // Create and instance of XmlSerializer class.
        XmlSerializer xmlSerializer = new XmlSerializer(typeof(LotInformation), xRoot);
        // DeSerialize from the StreamReader
        lot = (LotInformation)xmlSerializer.Deserialize(txtReader);
        // Close the stream reader
        txtReader.Close();
      }
public void ReadLot(LotInformation lot)
    {
        try
        {
            using (var db = new DDataContext())
            {
                var lotNumDb = db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(r.lot_number));
                 if (lotNumDb != null || lotNumDb.lot_number.ToString().Equals(lot.lot_number))
                 {
                     confirmationWindow.Message = LanguageResources.Resource.Sample_Exists_Already;
                     dialogService.ShowDialog(LanguageResources.Resource.Error, confirmationWindow);
                 }
                 else {
                     Console.WriteLine("lot does not exist. yay");
                 }

               DateTime ExpirationDate = lot.exp_date;
                if (ExpirationDate != null)
                {
                    if (DateTime.Compare(ExpirationDate, DateTime.Now) > 0)
                    {
                        try
                        {
                           LotInformation lotInfo = db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(lotNumber));
                        }
                        catch (InvalidOperationException e)
                        {
                            //TODO: Add a Dialog Here
                        }
                    }
                    else
                    {
                        Console.WriteLine(ExpirationDate);
                        errorWindow.Message = LanguageResources.Resource.Lot_Expired;
                        dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
                    }
                }
                else
                {
                    errorWindow.Message = LanguageResources.Resource.Lot_Not_In_Database;
                    dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
                }
            }
        }
        catch
        {
            errorWindow.Message = LanguageResources.Resource.Database_Error;
            dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
            logger.writeErrLog(LanguageResources.Resource.Database_Error);
        }
    }

我想我只是在这个过程中遇到了什么时候获取lot_number的问题。

下面这部分给了我问题。它一直显示样品存在已经消息的唯一批号,我上传,我不知道为什么。我认为这是我的LINQ查询的问题,但我不知道如何解决它。什么好主意吗?

                var lotNumDb = db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(r.lot_number));
                 if (lotNumDb != null || lotNumDb.lot_number.ToString().Equals(lot.lot_number))
                 {
                     confirmationWindow.Message = LanguageResources.Resource.Sample_Exists_Already;
                     dialogService.ShowDialog(LanguageResources.Resource.Error, confirmationWindow);
                 }
                 else {
                     Console.WriteLine("lot does not exist. yay");
                 }

WPF:我如何验证内存中的数字在数据库表中没有重复?

不能这样使用:

db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(r.lot_number))

可以是:

 db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(lot.lot_number)) 

 db.LotInformation.FirstOrDefault(r => r.lot_number.Equals(a string))