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);
        }
               
    }
}

问题分析:

你可能在循环中每次都对同一个数据表进行添加操作,导致数据被覆盖或重复添加。

解决方案:

  1. 在每次循环前创建一个新的 DataTable: 你可以将数据添加到一个临时 DataTable 中,然后将所有临时 DataTable 合并到最终的 DataTable 中。
  2. 在添加数据后调用 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() 方法可以确保数据被正确提交,避免数据丢失或不一致。
  • 在代码中加入必要的注释,解释代码的功能和目的,方便其他人理解和维护代码。
C# 中使用循环添加数据到 DataTable 导致数据丢失或重复的解决方法

原文地址: https://www.cveoy.top/t/topic/ntGN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录