C# 中使用循环添加数据到 DataTable 导致数据丢失或重复的解决方法
C# 中使用循环添加数据到 DataTable 导致数据丢失或重复的解决方法
在 C# 代码中,以下代码片段展示了使用循环添加数据到 DataTable 的方法:
public void DaliyOutputInformationSeek()
{
SqlCommand SqlCommandClassDataAnlysis = null;
SqlDataAdapter ClassDataAnlysisSqlAdapter = null;
SqlCommandBuilder ClassDataAnlysisSqlCMDBuilder = null;
for (int i = 0; i < 16; i++)
{
string sql = $'select * from {ProductProductionRecorderTableMainName}{i.ToString()} where {ProductionDate}= '{Time}' ';
SqlConnector.InitialSqlAdapterAndFillTable(sql, ref ClassDataAnlysisSqlAdapter, ref SqlCommandClassDataAnlysis,ref ClassDataAnlysisSqlCMDBuilder, DaliyOutputTable, 'DaliyOutputTable');
// DaliyOutputTable.Rows.Add(SqlConnector.ExecuteQuery(sql, commandType)) ;
foreach (DataRow row in SqlConnector.GetDataTable(sql).Rows)
{
DaliyOutputTable.Rows.Add(row.ItemArray);
}
}
}
问题分析:
你可能在循环中每次都对同一个数据表进行添加操作,导致数据被覆盖或重复添加。
解决方案:
- 在每次循环前创建一个新的 DataTable: 你可以将数据添加到一个临时 DataTable 中,然后将所有临时 DataTable 合并到最终的 DataTable 中。
- 在添加数据后调用 AcceptChanges() 方法: 每次循环后,调用
DaliyOutputTable.AcceptChanges()方法可以确保数据被正确提交。
代码示例:
public void DaliyOutputInformationSeek()
{
SqlCommand SqlCommandClassDataAnlysis = null;
SqlDataAdapter ClassDataAnlysisSqlAdapter = null;
SqlCommandBuilder ClassDataAnlysisSqlCMDBuilder = null;
DataTable finalDataTable = new DataTable('DaliyOutputTable');
for (int i = 0; i < 16; i++)
{
string sql = $'select * from {ProductProductionRecorderTableMainName}{i.ToString()} where {ProductionDate}= '{Time}' ';
SqlConnector.InitialSqlAdapterAndFillTable(sql, ref ClassDataAnlysisSqlAdapter, ref SqlCommandClassDataAnlysis,ref ClassDataAnlysisSqlCMDBuilder, DaliyOutputTable, 'DaliyOutputTable');
// 使用临时 DataTable 保存数据
DataTable tempDataTable = SqlConnector.GetDataTable(sql);
// 将临时 DataTable 数据合并到最终 DataTable 中
finalDataTable.Merge(tempDataTable);
// 清空临时 DataTable
tempDataTable.Clear();
}
// 最后将数据保存到最终 DataTable 中
finalDataTable.AcceptChanges();
}
建议:
- 尽量避免在循环中直接修改同一个 DataTable,使用临时 DataTable 或其他数据结构可以提高代码的效率和可读性。
- 使用
AcceptChanges()方法可以确保数据被正确提交,避免数据丢失或不一致。 - 在代码中加入必要的注释,解释代码的功能和目的,方便其他人理解和维护代码。
原文地址: https://www.cveoy.top/t/topic/ntGN 著作权归作者所有。请勿转载和采集!