DataAdapter 更新未正确将数据插入 SQL 服务器?
DataAdapter Update not properly Inserting data into SQL Server?
我有 2 个 DataTables
:第一个填充了我数据库中名为 Ticket_Report
的 table 的所有数据,第二个填充了新票证。
我正在 Ticket_report
数据table 中搜索新工单数据表中的重复项(并删除它们)。然后我将新的门票数据 table 合并到 Ticket_report
数据 table.
然后我尝试使用新编辑的 Ticket_report
数据 table 更新 SQL 服务器中的 Ticket_Report table。我期望 Update 方法使用具有来自数据 table 的匹配主键的行更新 SQL 服务器中的 table,并插入不存在的行。
我没有收到任何错误,但行似乎不是 updated/inserted。
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 服务器更新前后进行了一次计数查询。
更新前:
select count(*) from TICKET_REPORT
// = 3234
更新后:
select count(*) from TICKET_REPORT
// = 3234 <-Should be 3242 (row count of ticketReportDT)
似乎数据table 的行数正确,但是当我进行更新时,这并没有反映在SQL 服务器中。我做错了什么吗?
由于您在更新数据库之前调用了 ticketReportDT.AcceptChanges(),因此不会更新数据库中的任何内容。
我有 2 个 DataTables
:第一个填充了我数据库中名为 Ticket_Report
的 table 的所有数据,第二个填充了新票证。
我正在 Ticket_report
数据table 中搜索新工单数据表中的重复项(并删除它们)。然后我将新的门票数据 table 合并到 Ticket_report
数据 table.
然后我尝试使用新编辑的 Ticket_report
数据 table 更新 SQL 服务器中的 Ticket_Report table。我期望 Update 方法使用具有来自数据 table 的匹配主键的行更新 SQL 服务器中的 table,并插入不存在的行。
我没有收到任何错误,但行似乎不是 updated/inserted。
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 服务器更新前后进行了一次计数查询。
更新前:
select count(*) from TICKET_REPORT
// = 3234
更新后:
select count(*) from TICKET_REPORT
// = 3234 <-Should be 3242 (row count of ticketReportDT)
似乎数据table 的行数正确,但是当我进行更新时,这并没有反映在SQL 服务器中。我做错了什么吗?
由于您在更新数据库之前调用了 ticketReportDT.AcceptChanges(),因此不会更新数据库中的任何内容。