Linq C#控制台应用程序将记录与数据库进行比较
我正在解析一个平面文件,它正在逐行工作并插入到数据库中,但我想添加一个额外的步骤,实际上是额外的2个步骤 首先,我只想要特定汽车制造商的召回记录,我有一个名为AutoMake的数据库表,其中有我想要包括的所有品牌的列表。我需要将该记录与该表进行比较,以确保它是我想要包含的某个品牌的记录 然后,我需要进行第二次检查,以确保该记录不在我的数据库中。 这是一个控制台应用程序,我正在为此使用实体。所以这是我的代码,我正在疯狂地试图写和重写它,包括检查,但我只是没有得到它 哦,这并不重要,因为如果有人能让我走上正确的方向,我可以从那里出发,但是Linq C#控制台应用程序将记录与数据库进行比较,linq,c#-4.0,console-application,Linq,C# 4.0,Console Application,我正在解析一个平面文件,它正在逐行工作并插入到数据库中,但我想添加一个额外的步骤,实际上是额外的2个步骤 首先,我只想要特定汽车制造商的召回记录,我有一个名为AutoMake的数据库表,其中有我想要包括的所有品牌的列表。我需要将该记录与该表进行比较,以确保它是我想要包含的某个品牌的记录 然后,我需要进行第二次检查,以确保该记录不在我的数据库中。 这是一个控制台应用程序,我正在为此使用实体。所以这是我的代码,我正在疯狂地试图写和重写它,包括检查,但我只是没有得到它 哦,这并不重要,因为如果有人能让
tokens[2]
是MAKETXT
和RCL\u CMPT\u ID
是tokens[23]
和RCL\u CMPT\u ID
可以用来验证数据库中是否已经有记录,因为它是唯一的值
public static void ParseTSV(string location)
{
Console.WriteLine("Parsing.....");
using (var reader = new StreamReader(location))
{
var lines = reader.ReadToEnd().Split(new char[] { '\n' });
if (lines.Length > 0)
{
foreach (string line in lines)
{
if (string.IsNullOrWhiteSpace(line))
{
continue;
}
var tokens = line.Trim().Split(new char[] { '\t' });
var recalls = new Recalls();
recalls.RECORD_ID = tokens[0];
recalls.CAMPNO = tokens[1];
recalls.MAKETXT = tokens[2];
recalls.MODELTXT = tokens[3];
recalls.YEARTXT = tokens[4];
recalls.MFGCAMPNO = tokens[5];
recalls.COMPNAME = tokens[6];
recalls.MFGNAME = tokens[7];
recalls.BGMAN = tokens[8];
recalls.ENDMAN = tokens[9];
recalls.RCLTYPECD = tokens[10];
recalls.POTAFF = tokens[11];
recalls.ODATE = tokens[12];
recalls.INFLUENCED_BY = tokens[13];
recalls.MFGTXT = tokens[14];
recalls.RCDATE = tokens[15];
recalls.DATEA = tokens[16];
recalls.RPNO = tokens[17];
recalls.FMVSS = tokens[18];
recalls.DESC_DEFECT = tokens[19];
recalls.CONEQUENCE_DEFECT = tokens[20];
recalls.CORRECTIVE_ACTION = tokens[21];
recalls.NOTES = tokens[22];
recalls.RCL_CMPT_ID = tokens[23];
string connectionString = GetConnectionString();
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlCommand cmdIns = new SqlCommand(GetInsertSqlCust(recalls), connection);
connection.Open();
cmdIns.ExecuteNonQuery();
connection.Close();
cmdIns.Dispose();
cmdIns = null;
}
}
}
}
}
您可以利用缓存的优势。在读取文件之前获取所有make,并在现有AutoMake的列表或字典中进行查找,以检查数据库中是否已经存在该AutoMake或它是一个新的AutoMake。如果自动生成是新的,则在数据库中插入记录,并添加生成列表\字典。如果AutoMake已经存在,请跳过该行并移至下一行。1:获取要检查的ID 2:获取需要执行搜索的表,如
string strExpression="";
(Datatable tdGeneric = dal.getsometable())
3:要检查自动生成(如果存在):
if ( tdGeneric != null && tdGeneric.Rows.Count > 0)
{
strExpression = "tablecolumnsname = '" + recalls.MAKETXT + "' ";
tdGeneric.DefaultView.RowFilter = strExpression;
tdGeneric = tdGeneric.DefaultView.ToTable();
if (tdGeneric.Rows.Count > 0)
{
//make exist
}
else
make don't exists
}
else
{
make don't exist skip that text file's record
}
4:如果make exist,则检查表中是否存在记录
获取原始表,在该表上搜索您案例中的特定id:
(Datatable tdGeneric2 = dal.getsometable())
if ( tdGeneric2 != null && tdGeneric.Rows.Count > 0)
{
strExpression = "tablecolumnsname = '" + recalls.RCL_CMPT_ID + "' ";
tdGeneric2.DefaultView.RowFilter = strExpression;
tdGeneric2 = tdGeneric2.DefaultView.ToTable();
if (tdGeneric2.Rows.Count > 0)
{
//record exist
}
else
record don't exists
}
else
{
record don't exist insert the record, or some flag to insert a record
}