多个CSV导入对象映射器

时间:2015-07-26 15:08:20

标签: c# csv

我真的很陌生,所以感谢你的帮助...

所以我面临的挑战是将大量数据导入现有的sql 2012数据库,从每个新客户端的3个csv文件导入,他们是50个新客户端,每个客户端有3个csv文件。

我正在创建一个迷你Windows窗体应用程序,并在个人客户端进行导入。

enter image description here

然而,如何保持数据关系的设计理念正是我所挣扎的。

这是基本的csv对象映射:

enter image description here

所以我可以阅读客户数据,但我不知道如何阅读订单和约会,并在分配新的ID时保持它们之间的联系?)

private void btnImport_Click(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(txtClients.Text) && !string.IsNullOrEmpty(txtAccountId.Text))
    {
        var accountId = txtAccountId.Text;

        var clientData = File.ReadAllLines(txtClients.Text)
           .Skip(1)
           .Select(x => x.Split(','))
           .Select(x => new Client()
           {
               ClientTempId = int.Parse(x[0]),
               FirstName = x[1],
               LastName = x[2],
               AccountId = accountId,
               Id = Guid.NewGuid().ToString()
           });

        //Import Orders and then Appointments and maintain relationships....
    }
}

public class Client
{
    public string Id  { get; set; }
    public int ClientTempId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string AccountId { get; set; }
}

public class Order
{
    public string Id { get; set; }
    public int OrderTempId { get; set; }
    public string Name { get; set; }
    public string ClientId { get; set; }
    public string AccountId { get; set; }
}

public class Appointment
{
    public string Id { get; set; }
    public int AppointmentTempId { get; set; }
    public string ClientId { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string AccountId { get; set; }
}

我感谢您提供的示例和帮助。

2 个答案:

答案 0 :(得分:0)

在这种情况下,我经常使用从旧的int键创建一个guid的技巧:

string guid = String.Format("00000000-0000-0000-0000-{0:000000000000}", id);

这会产生如下指导:

  

00000000-0000-0000-0000-000000000077

这使您可以轻松保持记录之间的关系。

答案 1 :(得分:0)

我的工作也有类似的要求。我所做的是分别加载每个文件(但按适当的顺序),每个文件都加载到临时临时表。登台表没有任何参照约束,我不关心在将数据从文件加载到登台表时保持参照完整性。在加载所有文件之后,我然后使用查询来插入/更新主表,再次保持正确的顺序。这里的关键是确保只有在父表中存在父FK时才从登台表中插入/更新记录,这可以使用连接在一个查询(每个子表)中轻松完成。此时数据全部在SQL服务器上,因此将数据从一个表复制到另一个表可以非常快。以同样的方式,还可以报告或以其他方式对任何孤立的子记录采取行动。最后,我删除了临时表,主表都很好并且一致。