Sql 什么';更新数据库列表的最佳方法是什么?

Sql 什么';更新数据库列表的最佳方法是什么?,sql,sql-server,c#-4.0,Sql,Sql Server,C# 4.0,如果我有从数据库加载的以下C#列表 List<User> user = GetUsers(foo); List user=GetUsers(foo); 它已经更新了,我想把这些更改存储在数据库中,使用SQL最好的方法是什么?它应该插入添加到该列表中的记录,更新修改后的记录,并删除集合中不存在的记录 我没有使用EntityFramework,所以我需要使用SQL执行此操作。将此列表复制到datatable,并将datatable RowStat设置为(已修改、已删除、已新建) 并使

如果我有从数据库加载的以下C#列表

List<User> user = GetUsers(foo);
List user=GetUsers(foo);
它已经更新了,我想把这些更改存储在数据库中,使用SQL最好的方法是什么?它应该插入添加到该列表中的记录,更新修改后的记录,并删除集合中不存在的记录


我没有使用EntityFramework,所以我需要使用SQL执行此操作。

将此列表复制到datatable,并将datatable RowStat设置为(已修改、已删除、已新建)
并使用sqldataadapter更新datatable,下面是一个添加或插入行的示例。它搜索具有特定
用户ID的行。如果该行存在,它将使用
update
向用户授予分数。如果该行不存在,则使用
insert
创建新行

var connectionString = "Data Source=myServerAddress;" +
    "Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;"
using (var con = new SqlConnection(connectionString))
{
    con.Open();
    var com = con.CreateCommand();
    com.Parameters.AddWithValue("@UserId", userId);
    com.CommandText = @"
if exists (select * from YourTable where UserId = @UserId)
    update YourTable set TrollPoints = TrollPoints + 1 where UserId = @UserId
else
    insert YourTable (UserId, TrollPoints) values (@UserId, 1)
        ";
    com.ExecuteNonQuery();
}

参数的使用允许服务器更改执行计划,也有助于防止SQL注入。

不是每个人都可以选择他们在工作中使用的技术您使用的是哪个版本的SQL server?我正在考虑这样做,但我的问题是在客户端中删除的项目正在发送到服务器