-5

プログラムを実行すると、既存のアイテムがある場合、実行はキャッチにステップインする必要があります

con2=new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0DataSource=e:\\convert.accdb" + "; Persist Security Info=False");
OleDbCommand cmd = new OleDbCommand(sql, con2);           
con2.Open();           
try {
  cmd.ExecuteNonQuery();
  con2.Close();
  MessageBox.Show("Thanks");
}
catch (Exception ex) {
  MessageBox.Show(ex.Message);
  con.Close();
}
4

2 に答える 2

2

ブロックcatch内にエラーがある場合にのみ、パーツが評価されます。tryそのため、呼び出しによって例外が発生した場合は、そのブロックに分類されます。例外を発生させた場合も同様です。

ExecuteNonQueryを返すintので、たとえば 0 より大きい値を返したときに例外をスローしたい場合は、次のようにします。

con2.Open();

try {
  if (cmd.ExecuteNonQuery() > 0) {
    throw new Exception("More than zero rows affected");
  }
  con2.Close();
  MessageBox.Show("Thnaks");
}
catch (Exception ex) {
 MessageBox.Show(ex.Message);
 con.Close();
}

しかし、これでも多くのことが望まれます。たとえばfinally、接続の管理に使用できます(およびコマンドも使い捨てであるため):

try {
  if (cmd.ExecuteNonQuery() > 0) {
    throw new Exception("More than zero rows affected");
  }
  MessageBox.Show("Thanks");
}
catch (Exception ex) {
 MessageBox.Show(ex.Message);
}
finally {
  con.Close();
  con2.Close();
  cmd.Close();
}

さらに、例外を使用して実行の流れを処理しますか? 例外はその名前の通り、例外的な状況で考慮されるため、これは一般的に嫌われています。何が起こるかを知っている場合は、ほとんど例外ではありません。

于 2013-04-04T12:04:55.587 に答える