在 C# 中使用 SqlBulkCopy 插入新记录和更新现有记录

Insert new records and update existing records using SqlBulkCopy in c#

我想使用 sqlbulkcopy 方法插入新数据并更新现有数据。

我创建了始终插入记录的方法,因此重复数据在 table

中可用
string ConnectionString = Utility.GetLocalDBConnStr(dbConnModal);
DataTable dt = Utility.ToDataTable(UsersList);
using (SqlConnection connection = new SqlConnection(ConnectionString))
{
    SqlBulkCopy bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock |
    SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.UseInternalTransaction, null);

    bulkCopy.DestinationTableName = "User";
    connection.Open();
    bulkCopy.WriteToServer(dt);
    connection.Close();
    res = true;
}

如何实现这个东西?请提出任何方法。

请查找下面的存储过程,如果在 empnre01 列基础上不存在则插入数据,如果存在则更新数据,这是 table 中的唯一 ID。

Create Proc usp_InsertUpdateAWSUsers
@tblUsers UsersTableType READONLY
AS
BEGIN
SET NOCOUNT ON;
    UPDATE u1
    SET u1.empste01= u2.empste01
        ,u1.[fstnme01] = u2.[fstnme01]
        ,u1.[surnme01] = u2.[surnme01]
        ,u1.[bthcnte01]= u2.[bthcnte01]
        ,u1.[fnce01]   = u2.[fnce01]
        ,u1.[lane01]   = u2.[lane01]
        ,u1.[rsnewe01] = u2.[rsnewe01]
        ,u1.[sxee01]   = u2.[sxee01]
        ,u1.[bthdate01]= u2.[bthdate01]
        ,u1.[nate01]   = u2.[nate01]
    FROM Users u1
    INNER JOIN @tblUsers u2
    ON u1.empnre01=u2.empnre01

    INSERT INTO Users
        (empnre01,empste01,[fstnme01],[surnme01],[bthcnte01],[fnce01],[lane01],     [rsnewe01],[sxee01],[bthdate01],[nate01])
        SELECT u2.empnre01,u2.empste01,u2.[fstnme01],u2.[surnme01],u2.[bthcnte01],u2.[fnce01],u2.[lane01],u2.[rsnewe01]
        ,u2.[sxee01],u2.[bthdate01],u2.[nate01]
        FROM @tblUsers u2
        WHERE empnre01 NOT IN (SELECT empnre01 FROM Users)
    END

然后您可以像这样从 C# 代码调用此 SP:

        DataTable dt = List of data to be update in table.
        using (SqlConnection connection = new SqlConnection(ConnectionString))
        {
            using (SqlCommand cmd = new SqlCommand("usp_InsertUpdateAWSUsers"))
            {
                                 cmd.CommandType = CommandType.StoredProcedure;
                                 cmd.Connection = connection;
                                 cmd.Parameters.AddWithValue("@tblUsers", dt);
                                 connection.Open();
                                 cmd.ExecuteNonQuery();
                                 connection.Close();
                                 res = true;
             }
        }