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");
}
不能这样使用:
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))