Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何快速删除然后将多个记录插入数据库_C#_Asp.net_Sql Server 2008 - Fatal编程技术网

C# 如何快速删除然后将多个记录插入数据库

C# 如何快速删除然后将多个记录插入数据库,c#,asp.net,sql-server-2008,C#,Asp.net,Sql Server 2008,我有一个ASP.NET web应用程序,需要一次删除和插入多条记录 假设用户点击了一个按钮。它将删除此用户的所有现有记录,并将一组新记录插入数据库 例如,用户A在数据库中有720条记录。当用户单击Update按钮时,它将删除现有的700条记录,并将一组新记录(比如854条记录)插入数据库 用户将经常使用此功能 我计划这样做: 删除用户的所有记录 将所有记录存储在集合中 使用foreach循环整个集合并逐个插入记录 但我担心可能存在性能问题 是否有更好的方法执行此操作?您只需在执行插入之前删除用户

我有一个ASP.NET web应用程序,需要一次删除和插入多条记录

假设用户点击了一个按钮。它将删除此用户的所有现有记录,并将一组新记录插入数据库

例如,用户A在数据库中有720条记录。当用户单击Update按钮时,它将删除现有的700条记录,并将一组新记录(比如854条记录)插入数据库

用户将经常使用此功能

我计划这样做:

  • 删除用户的所有记录

  • 将所有记录存储在集合中

  • 使用
    foreach
    循环整个集合并逐个插入记录

  • 但我担心可能存在性能问题


    是否有更好的方法执行此操作?

    您只需在执行
    插入之前
    删除
    用户记录:

    为什么不作为数据库操作执行此操作(在插入用户记录之前运行此代码):

    关于插入记录的最快方法,您可以找到许多帖子:


    在执行
    插入之前,您只需
    删除
    用户记录:

    为什么不作为数据库操作执行此操作(在插入用户记录之前运行此代码):

    关于插入记录的最快方法,您可以找到许多帖子:


    您可以使用类似ORM的实体框架,它支持批量更新

    使用实体框架,您可以按以下方式执行:

    MyEntities dbContext = new MyEntities();
    dbContext.Users.Add(new User(){Name="User1"});
    dbContext.Users.Add(new User(){Name="User2"});
    dbContext.SaveChanges();
    
    要使用实体框架删除所有记录,请执行以下操作:

    dbContext.Database.ExecuteSqlCommand("delete from User");
    
    您可以在一批中进行所有更改:

    //get all or needed users
    List<User> users = dbContext.Users.ToList();
    
    foreach (var user in users)
    {
        if (CheckCondition) //update user
        {
            user.Name = "new name";
            dbContext.Entry(user).State = EntityState.Modified;
        }
        else if (CheckCondition) // delete user
        {
            dbContext.Entry(user).State = EntityState.Deleted;
        }
    }
    dbContext.Users.Add(new User() {Name = "Name3"}); //add new user
    dbContext.SaveChanges(); //save all changes in one batch in a single transaction
    
    //获取所有或需要的用户
    List users=dbContext.users.ToList();
    foreach(用户中的var用户)
    {
    if(CheckCondition)//更新用户
    {
    user.Name=“新名称”;
    dbContext.Entry(user.State=EntityState.Modified;
    }
    else if(CheckCondition)//删除用户
    {
    dbContext.Entry(user.State=EntityState.Deleted;
    }
    }
    添加(新用户(){Name=“Name3”})//添加新用户
    dbContext.SaveChanges()//在单个事务中保存一批中的所有更改
    
    您可以使用类似ORM的实体框架,它支持批量更新

    使用实体框架,您可以按以下方式执行:

    MyEntities dbContext = new MyEntities();
    dbContext.Users.Add(new User(){Name="User1"});
    dbContext.Users.Add(new User(){Name="User2"});
    dbContext.SaveChanges();
    
    要使用实体框架删除所有记录,请执行以下操作:

    dbContext.Database.ExecuteSqlCommand("delete from User");
    
    您可以在一批中进行所有更改:

    //get all or needed users
    List<User> users = dbContext.Users.ToList();
    
    foreach (var user in users)
    {
        if (CheckCondition) //update user
        {
            user.Name = "new name";
            dbContext.Entry(user).State = EntityState.Modified;
        }
        else if (CheckCondition) // delete user
        {
            dbContext.Entry(user).State = EntityState.Deleted;
        }
    }
    dbContext.Users.Add(new User() {Name = "Name3"}); //add new user
    dbContext.SaveChanges(); //save all changes in one batch in a single transaction
    
    //获取所有或需要的用户
    List users=dbContext.users.ToList();
    foreach(用户中的var用户)
    {
    if(CheckCondition)//更新用户
    {
    user.Name=“新名称”;
    dbContext.Entry(user.State=EntityState.Modified;
    }
    else if(CheckCondition)//删除用户
    {
    dbContext.Entry(user.State=EntityState.Deleted;
    }
    }
    添加(新用户(){Name=“Name3”})//添加新用户
    dbContext.SaveChanges()//在单个事务中保存一批中的所有更改
    
    为什么不更新必要的字段? 好吧,如果您担心性能,可以使用原始查询,而不是使用大型ORM。从您的需要来看,我认为在执行删除和插入操作时最好使用事务

    以下是我认为对您有用的:


    为什么不更新必要的字段? 好吧,如果您担心性能,可以使用原始查询,而不是使用大型ORM。从您的需要来看,我认为在执行删除和插入操作时最好使用事务

    以下是我认为对您有用的:


    如果你有一组对象,那么我会:
    将其放入事务中
    删除
    使用表值参数(TVP)插入
    (并对PK上的插入进行排序,以最小化碎片)

    通过TVP插入类似于反向数据读取器
    如果您有原始数据,您正在解析和加载,我会说bulkcopy
    但您声明您有一个收藏

    一次只插入一行,插入时间少于1000,应该很快。
    如果它是一个非常活跃的表,并且很难获得写锁,则会出现问题。
    即使只需一个简单的插入,也可以打包多达100个值(),()。

    但如果你想追求速度,我还是会选择TVP超过100的

    如果你有一组对象,那么我会:
    将其放入事务中
    删除
    使用表值参数(TVP)插入
    (并对PK上的插入进行排序,以最小化碎片)

    通过TVP插入类似于反向数据读取器
    如果您有原始数据,您正在解析和加载,我会说bulkcopy
    但您声明您有一个收藏

    一次只插入一行,插入时间少于1000,应该很快。
    如果它是一个非常活跃的表,并且很难获得写锁,则会出现问题。
    即使只需一个简单的插入,也可以打包多达100个值(),()。

    但如果你想追求速度,我还是会选择TVP超过100的

    如果许多记录保持不变或只需要更新,则不需要删除-插入对。您可以将
    MERGE
    语句与表值参数一起使用,一次在一条效率最高的语句中执行插入、更新和删除操作。这可能是最快的方法<代码>合并
    经过了很好的优化,可以以最佳方式一次执行所有写入操作


    我的经验是,这种技术在实践中效果很好。

    如果许多记录保持不变或只需要更新,则不需要删除-插入对。您可以将
    MERGE
    语句与表值参数一起使用,一次在一条效率最高的语句中执行插入、更新和删除操作。这可能是最快的方法<代码>合并
    经过了很好的优化,可以以最佳方式一次执行所有写入操作

    我的经验是,这种技术效果很好