2016-05-09 4 views
2

は、私はこれらのクエリのそれぞれが正常に実行されたかどうかを知る方法すべてのクエリがループで正常に実行されたかどうかを知る方法?

foreach (var obj in mainObject) { 
    db.Execute("update Table set Column = @0 where [email protected] and C2 [email protected]", Column1, obj.data1, obj.data2); 
} 

、同じようPetaPocoを使用してループ内で更新クエリを実行したと仮定しますか?

+0

戻り値を保存しないのはなぜですか? –

答えて

4

通常PetaPoco戻りまたはいずれかの行が影響を受けている場合は、単一のクエリが正常に実行または意味されている場合大きく、失敗した場合。あなたのような、ループ内であることを追加することによって、それらの値をトレースすることができます。このシナリオでは

List<int> checkSuccess = new List<int>(); //To trace the value returned by execute query 

foreach (var obj in mainObject) { 
    int updated = db.Execute("update Table set Column = @0 where [email protected] and C2 [email protected]", Column1, obj.data1, obj.data2); 
    checkSuccess.Add(updated); 
} 

if (checkSuccess.All(i => i >= 1)) 
{ 
    //Your every queries has been updated successfully 
} 
+0

私は2日間これを探していましたが、コンセプトリスト私は思ったが、近くにいた、ありがとうございました –

+2

正しくはない、 'Execute'は成功のために1を返し、失敗のために0を返しません。影響を受けた行の数を返します。たとえば、このクエリを実行すると、 'DELETE FROM Table'はこのテーブルのすべての行を削除し、戻り値はこのテーブルの行数になります。したがって、0が失敗または1が成功すれば、ロジックとクエリに依存します。 –

+0

@TimSchmelter Ohh申し訳ありませんが、ありがとう、私は本当にあなたの提案に感謝します。 –

0
foreach (var obj in mainObject) 
{ 
    var result = db.Execute("update Table set Column = @0 where [email protected] and C2 [email protected]", Column1, obj.data1, obj.data2); 
    if (result < 1) 
    { 
    //not ok 
    } 
} 
+0

ありがとうございます –

5

Executeは、影響を受ける行の数を返します。したがって、ある行を更新すると、成功した場合は1が戻り値になり、それ以外の場合は0(またはエラー)となります。

bool allSucceeded = true; 
foreach (var obj in mainObject) 
{ 
    int updated = db.Execute("update Table set Column = @0 where [email protected] and C2 [email protected]", Column1, obj.data1, obj.data2); 
    bool succeed = updated != 0; 
    if(!succeed) 
     allSucceeded = false; 
} 

したがってExecuteは、成功の場合は1、失敗の場合は0を返しません。影響を受けた行の数を返します。たとえば、次のクエリを実行すると:DELETE FROM Tableこのテーブルのすべての行が削除され、戻り値はこのテーブルの行数になります。したがって、0が失敗または1が成功すれば、ロジックとクエリに依存します。

ところで、この動作は、SqlCommand.ExecuteNonQueryのようなADO.NETメソッドと一貫しています。

+0

ありがとうございました –

関連する問題