首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CSV文件更新DB中的成员详细信息

问从CSV文件更新DB中的成员详细信息
EN

Stack Overflow用户
提问于 2019-03-25 01:25:07
回答 1查看 41关注 0票数 0

我有一个小的exec(旧的)来处理添加成员到数据库中的表。如果该成员在数据库中不存在,它将在AllMember表中插入新的成员。如果该成员已存在于数据库中,它将更新不同的值。代码中已经存在的东西并没有像我想要的那样更新所有的成员。我现在想高效地编码它。对于每一次更新,我从数据库(6000)的所有成员,如果我有4,000名成员的excel,它将使比较24000000,并将随着时间的推移而增加。

获取所有成员:

代码语言:javascript
复制
 public static IEnumerable<AllMember> GetAllMembersList()
        {
             string connection = ConfigurationManager.ConnectionStrings["connectionString"].ToString();
      using (var dataAccess = new DataAccessDataContext(connection))
            {
                var v = (from row in dataAccess.AllMembers
                        //where row.PremiumType.HasValue && row.PremiumType.Value == 100
                        select row);
                return v.ToList();
            }



            //@TODO fun 

        }

处理新\更新成员的文件

代码语言:javascript
复制
 internal override void ProcessFile()
        {

            StringBuilder CheckMembersList = new StringBuilder();
            CheckMembersList.Clear();
            ErrorFounds = false;
            UpdateQuery = new StringBuilder();

            if (!System.IO.File.Exists(InputFile))
            {
                Mail.InsertNewMail("שגיאה בתהליך קליטת פרטי משתמשים ", "הקובץ " + InputFile + " לא נמצא ");
                return;
            }
            CsvReader fileReader = new CsvReader(InputFile, FileEncoding, false, false);
            DataTable fileContentTable = fileReader.ReadFile();
            FileInfo fileInfo = new FileInfo(InputFile);

            UpdateDB(fileContentTable, CheckMembersList);
            WriteResponseFile(fileContentTable);
}

更新数据库:

代码语言:javascript
复制
private void UpdateDB(DataTable inputTable, StringBuilder CheckMembersList)
        {
            IEnumerable<AllMember> allMembersList = Utilities.GetAllMembersList();

            DBUpdateStatus updateStatus = DBUpdateStatus.NO_CHANGE;
            bool x;
            bool newMember;
            int rowIndex=0 ;
            for (int i = 1; i < inputTable.Rows.Count; i++)
            {

                rowIndex = i;
                DataRow fileRow = inputTable.Rows[i];
                newMember = true;
  foreach (AllMember membersRow in allMembersList)
                {

                    if (!(String.IsNullOrEmpty(membersRow.TZ))) /*&& (fileRow[ConstDBRow.TZ].ToString().Trim().PadLeft(9, '0') == membersRow.TZ.ToString().Trim().PadLeft(9, '0')))*/
                    {
                        newMember = false;
                        updateStatus = UpdateMemberDetails(fileRow, membersRow);
                        break;
                    }
                }
                if (newMember == true)
                    updateStatus = InsertNewMember(fileRow);



                var memberId = GetMemberId(fileRow[ConstDBRow.TZ].ToString().Trim().PadLeft(9, '0'));
   if (updateStatus != DBUpdateStatus.NO_CHANGE)
                    QueryBuilder.InsertRequest(memberId, updateStatus);

                fileRow["UPDATE_STATUS"] = Utilities.GetStatusString(updateStatus);

                //append to CheckMembersList for sending members list through email
                CheckMembersList.AppendLine("Row Index: " + Convert.ToString(rowIndex + 1) +", Identification number: " + (fileRow[ConstDBRow.TZ].ToString().Trim().PadLeft(9, '0')) + ", First Name: " + fileRow[ConstDBRow.FIRST_NAME].ToString().Replace("'","''") + ", Last Name: " + fileRow[ConstDBRow.LAST_NAME].ToString().Replace("'","''") + ", Update Status: " + fileRow["UPDATE_STATUS"].ToString().Replace("'", "''") + "<br/>");
            }

        }

我怎样才能有效地做到这一点呢?EntityFramework是一个好的选择,还是以不同的方式处理所有成员的列表?

EN

回答 1

Stack Overflow用户

发布于 2019-03-25 04:06:47

我将把比较记录和使用Merge SQL语句插入/更新的任务留给DB。

在SQL Server中有Merge,希望它也可以在其他数据库服务器上使用https://docs.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql?view=sql-server-2017作为注释:您是否正在为您的每条记录执行插入/更新请求?尝试执行一次DB调用

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55326482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档