C# foreach总是重复第一个元素
我尝试使用数据集更新SQL数据库,我尝试在数据集中使用foreach,如果元素已在数据库中,则捕获错误并继续下一个,但错误始终相同: “System.Data.SqlClient.SqlException(0x80131904):违反主 密钥约束“PK_share1”。无法在对象中插入重复的密钥 “dbo.share1”。重复的键值为(4008)。” 我不明白为什么这个foreach总是三位一体,只插入数据集的一个元素,而不是继续并找到一个新的元素C# foreach总是重复第一个元素,c#,sql-server,foreach,C#,Sql Server,Foreach,我尝试使用数据集更新SQL数据库,我尝试在数据集中使用foreach,如果元素已在数据库中,则捕获错误并继续下一个,但错误始终相同: “System.Data.SqlClient.SqlException(0x80131904):违反主 密钥约束“PK_share1”。无法在对象中插入重复的密钥 “dbo.share1”。重复的键值为(4008)。” 我不明白为什么这个foreach总是三位一体,只插入数据集的一个元素,而不是继续并找到一个新的元素 if (changes != null)
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;
}
}
}
在第一段代码中,您将遍历行,但每次都会更新整个数据集。如果要更新数据集,则不需要多次更新
if (changes != null)
{
try
{
adapter.Update(changes);
Console.WriteLine("Changes Done");
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
在第二段代码中,您将遍历表,但会更新整个DimSet。要逐个更新表,您应该调用adapter.update(table)代码>而不是适配器。更新(更改)代码>
注意,adapter.Update(更改)代码>不引用任何表或行。它会更新整个数据集。您不需要foreach的foreach
。每次传递相同的参数时。。。更改,如adapter.Update(更改);要做我想做的事情,我必须输入:if(changes!=null){try{adapter.ContinueUpdateOnError=true;adapter.Update(changes);}catch(Exception ex){Console.WriteLine(ex.ToString());}}如果设置adapter.ContinueUpdateOnError=true
,则行更新期间的错误将被忽略。我宁愿努力避免这些错误,而不是仅仅忽略它们。
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;
}
}
}