如何知道每个查询是否在循环中成功执行?

Sub*_*tri 2 c# foreach petapoco

假设我使用PetaPoco在循环中执行了更新查询,

foreach (var obj in mainObject) {
   db.Execute("update Table set Column = @0 where C1=@1 and C2 =@2", Column1, obj.data1, obj.data2);
}
Run Code Online (Sandbox Code Playgroud)

如何知道每个查询是否已成功执行?

Tim*_*ter 5

Execute返回受影响的行数.因此,如果你更新了一行,你会得到1返回值,如果成功,否则为0(或错误).

bool allSucceeded = true;
foreach (var obj in mainObject) 
{
    int updated = db.Execute("update Table set Column = @0 where C1=@1 and C2 =@2", Column1, obj.data1, obj.data2);
    bool succeed = updated != 0;
    if(!succeed) 
        allSucceeded = false;
}
Run Code Online (Sandbox Code Playgroud)

所以Execute不会返回1表示成功,0表示失败.它返回受影响的行数.例如,如果您执行此查询:DELETE FROM Table您将删除此表的所有行,返回值将是此表中的行数.所以它取决于逻辑和查询,如果0是失败或1是成功.

顺便说一句,这种行为与ADO.NET方法一致SqlCommand.ExecuteNonQuery.