从客户端计算机读取数据并将其保存到数据库,而无需保存文件或将其上载到服务器

时间:2018-04-16 19:20:26

标签: c#

我有一个应用程序,用户可以逐个保存客户位置。但如果客户有很多位置,那么一个接一个地输入它将花费大量时间。所以我需要一种用户可以进行批量导入的机制,这意味着他们可以保存csv或excel文件中的所有位置,我需要做的就是逐个读取所有行并将其保存到数据库而无需保存实际文件或上传文件到服务器。

我正在寻找一种解决方案,我可以在内存中读取csv文件,通常文件大小将小于5MB。

当我从我自己的机器上执行此操作时(因为我已对文件路径进行了硬编码),但当服务器和客户端位于不同的计算机上时,它将无法工作。

这是我用来解析csv

        try
        {
            using (TextFieldParser parser = new TextFieldParser(@"C:\Users\temp\docs\Location.csv"))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");
                parser.ReadLine();

                var row= new ImportLocationModel();

                while (!parser.EndOfData)
                {
                    row=ImportLocationModel.FromFields(parser.ReadFields();                  
              clientFindProviderApi.InsertUpdateCustomerListLocation1(list); // saving location in database. 
                }

                return true;
            }
        }

1 个答案:

答案 0 :(得分:0)

将数据传输到服务器而不上传它是不可能的。您可以阻止将数据存储在磁盘上。只需缓存到MemoryStream中,然后就会像所有其他未使用的托管内存一样进行收集。

然而,目前还不清楚这是否是您非常需要/想要的。听起来更像是你需要/应该使用分布式数据库。一旦你在客户端有一个镜像/缓存数据库,将它与服务器上的主服务器同步(反之亦然)就是DMBS。

你不应该对Filesize有所了解。 “万无一失的系统开发人员低估了傻瓜的聪明才智。”假设某些用户将创建一个文件/数据以100 MiB大小同步。还假设你的客户可能是一个手机,那时候有一个糟糕的互联网连接。因此,您应该以同样的方式将Synch移动到异步任务。