使用ADO.net从Excel导入到数据库的验证

时间:2017-08-16 09:36:25

标签: c# excel ado.net

我需要将数据从Excel附加到数据库,因此我需要检查Excel列中的验证,如果dr[0]是否为数字,并且Excel中的任何行在数据库中重复跳过它并仅添加新的记录:

MaamoonKhalidIssueEntities db = new MaamoonKhalidIssueEntities();
                    foreach (DataTable table in result.Tables)
                    {
                        foreach (DataRow dr in table.Rows)
                        {
                            Person addtable = new Person()
                            {

                                nparent =Convert.ToInt32(dr[0]),
                                ncode = Convert.ToString(dr[1]),
                                nname = Convert.ToString(dr[2])

                            };
                        db.People.Add(addtable);
                        }

我无法检查dr[0]因为它的对象

1 个答案:

答案 0 :(得分:0)

您可以编写ValidateNewPerson-Method。此方法尝试从数据库中获取具有相同ncode的人员。如果成功,则记录无效,否则,可以添加此人:

public bool ValidateNewPerson(Person newPerson, MaamoonKhalidIssueEntities db)
{
    var dbPerson = db.People.Where(e => e.ncode == newPerson.ncode).FirstOrDefault();
    if (dbPerson == null)
        return true;
    else
        return false;
}

现在你可以在你的foreach中调用这个方法:

foreach (DataRow dr in table.Rows)
{
    Person addtable = new Person()
    {
        nparent =Convert.ToInt32(dr[0]),
        ncode = Convert.ToString(dr[1]),
        nname = Convert.ToString(dr[2])
    };
    if (ValidateNewPerson(addtable, db))
        db.People.Add(addtable);
 }        

如果您想使用Linq-Method,您可以使用Any来请求您的数据库中的任何记录是否符合您的条件:

foreach (DataRow dr in table.Rows)
{
    Person addtable = new Person()
    {
        nparent =Convert.ToInt32(dr[0]),
        ncode = Convert.ToString(dr[1]),
        nname = Convert.ToString(dr[2])
    };
    if (!db.People.Any(p => p.ncode == addtable.ncode))
        db.People.Add(addtable);
 }