2016-11-08 12 views
-1

私は非pkフィールドの値を「安全に」使って行を取得しようとしています 私はそれを動作させることができますが、私はtryフィールド名が存在しないか、値を持つ行が見つからない場合は、アプリケーションをクラッシュさせないようにキャッチします。「安全に」特定のフィールド値を持つデータテーブルの行を見つけよう

しかし、今度は、すべての経路が値を返さないことを示しているので、これはメソッドを詰まらせる。ここで

は私のコードです:

private DataRow getRowByFieldVal(DataSet DtaSet, string sorceTable, string fieldName, string fieldValue) 
{ 
    try 
    { 
     DataRow[] foundRows = DtaSet.Tables[sorceTable].Select(fieldName + " = " + fieldValue); 
     return foundRows[0]; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 

答えて

3

コンパイラは、ユースケースを想像してみてWhat do you want to return if there is error in try block?

を求めています。

tryブロックにエラーがあり、catchが実行を開始しますが、この関数は何かを返す必要があるためです。その場合、何を返すべきか。 nullになるか、throwを使用して例外をスローします。

だから、あなたは、このためのtry-catchを使うべきではありません

catch (Exception ex) 
{ 
    MessageBox.Show(ex.ToString()); 
    return null; //Add this line. 
} 
2

を行うことができます。指定された値を持つ行が見つからない場合は、ifでチェックすることができます。 try-catchは、例外をスローする可能性のあるブロックを対象としています。代わりに

return foundrows[0]; 

があるかどうかを最初に確認してから、それを返します。

しかし、あなたの質問に答えるために、catchブロックがaswell

return null; 

おそらく

を返す必要があります
関連する問題