数据适配器更新不正确 将数据插入 SQL Server

本文关键字:数据 SQL Server 插入 不正确 适配器 更新 | 更新日期: 2023-09-27 18:31:11

我有 2 个DataTables:1 个填充了数据库中一个名为 Ticket_Report 的表中的所有数据,第二个填充了新票证。

我正在Ticket_report数据表中搜索新工单数据表中的重复项(并删除它们)。然后我将新的工单数据表合并到Ticket_report数据表中。

然后,我尝试使用新编辑的Ticket_report数据表更新 SQL Server 中的Ticket_Report表。我希望 Update 方法使用数据表中具有匹配主键的行更新 SQL Server 中的表,并插入不存在的行。

我没有收到任何错误,但是似乎没有更新/插入行。

con.Open();
DataTable ticketReportDT = new DataTable();
ticketReportDT = newTicketdt.Clone();
ticketReportDT.Columns[0].Unique = true;
SqlCommand cmd2 = new SqlCommand("SELECT * FROM ticket_report", con);
SqlDataAdapter da = new SqlDataAdapter(cmd2);
da.Fill(ticketReportDT);
da.UpdateCommand = new SqlCommandBuilder(da).GetUpdateCommand();
int currentTicketCount = ticketReportDT.Rows.Count;//3234
int newTicketCount = newTicketdt.Rows.Count; //339
//Removing Duplicate tickets in ticketReportDt
foreach (DataRow NewTicketsRow in newTicketdt.Rows)
{
   foreach (DataRow currentTicketsRow in ticketReportDT.Select())
    {
        if (currentTicketsRow.Field<string>(ticketReportDT.Columns[0]) == NewTicketsRow.Field<string>(newTicketdt.Columns[0]))
        {
            currentTicketsRow.Delete();
        }
    }
}
ticketReportDT.AcceptChanges();
int currentTicketCount2 = ticketReportDT.Rows.Count;//2903, is less than last count because duplicates removed
ticketReportDT.Merge(newTicketdt);//add new tickets to ticketReportDT
ticketReportDT.AcceptChanges();
int currentTicketCount3 = ticketReportDT.Rows.Count;//3242, count went up because new tickets added
da.Update(ticketReportDT);//apply changes to database table Ticket_Report
con.Close();
Console.WriteLine("Ticket Transfer Complete");

这将运行而不会出错。为了进行测试,我在此更新之前和之后在 SQL Server 中进行了计数查询。

更新前:

select count(*) from TICKET_REPORT
// = 3234

更新后:

select count(*) from TICKET_REPORT
// = 3234 <-Should be 3242 (row count of ticketReportDT)

似乎数据表具有正确的行数,但是当我进行更新时,这不会反映在SQL Server中。我做错了什么吗?

数据适配器更新不正确 将数据插入 SQL Server

由于您在更新数据库之前调用了 ticketReportDT.AcceptChanges(),因此不会更新数据库中的任何内容。