Foreach总是重复第一个元素

本文关键字:第一个 元素 Foreach | 更新日期: 2023-09-27 17:50:42

我试图使用数据集来更新SQL数据库,我试图在数据集中使用foreach,如果元素已经在数据库中捕获错误并继续下一个,但错误总是相同的:

" System.Data.SqlClient。SqlException (0x80131904): PRIMARY的冲突密钥约束'PK_share1'。无法在对象中插入重复键"dbo.share1"。重复键值为(4008)。"

我不明白为什么这个foreach总是试图只插入数据集的一个元素,而不是继续寻找一个新的

 if (changes != null)
                {
                    foreach (DataRow row in changes.Tables[0].Rows)
                    {
                        try{
                        adapter.Update(changes);
                        Console.WriteLine("Changes Done");}
                        catch(Exception ex){
                            Console.WriteLine(ex.ToString());
                            continue;
                        }
                    }
                }

我也试过:

 if (changes != null)
                {

                    foreach (DataTable table in changes.Tables)
                    {
                        try{
                        adapter.Update(changes);
                        Console.WriteLine("Changes Done");}
                        catch(Exception ex){
                            Console.WriteLine(ex.ToString());
                            continue;
                        }
                    }
                }

Foreach总是重复第一个元素

在第一个代码中,你通过行迭代,但每次更新整个数据集。如果你想更新DataSet,那么你不需要做很多次。

if (changes != null)
{
    try
    {
        adapter.Update(changes);
        Console.WriteLine("Changes Done");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

在第二段代码中,您遍历表,但更新整个DimSet。要逐个更新表,您应该调用adapter.Update(table);而不是adapter.Update(changes);

if (changes != null)
{
    foreach (DataTable table in changes.Tables)
    {
        try
        {
            adapter.Update(table);
            Console.WriteLine("Changes Done");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
            continue;
        }
    }
}