Ваша обработка исключений ужасна. Никогда сделать это:
catch (Exception ex) { throw ex; }
Все, что вам нужно, это испортить трассировку стека в исключении. Это выглядит как исключение, возникшее в точке throw
.
Никогда сделать это:
try{
mybusinessobject.savetodatabase()
} catch( Exception ex) {
Response.Redirect("Error.aspx");
}
Вы не знаете, что произошло исключение. Вы понятия не имеете, безопасно ли перенаправлять или нет, и, кроме того, вы теряете всю информацию о том, что было исключением!
Вы должны также привыкнуть к реализации блоков using
:
public static void savetodatabase()
{
using (SqlConnection con = new SqlConnection("Connectionstring"))
{
int ID1;
//store the billing contact
using (SqlCommand cmd1 = new SqlCommand("SaveInfo1", con))
{
cmd1.CommandType = CommandType.StoredProcedure;
//...
cmd1.Parameters.Add("@Ret", SqlDbType.Int);
cmd1.Parameters["@Ret"].Direction = ParameterDirection.ReturnValue;
con.Open();
cmd1.ExecuteNonQuery();
ID1 = Convert.ToInt32(cmd1.Parameters["@Ret"].Value);
}
if (ID1 <= 0)
{
return;
}
int ID2 = -1;
using (SqlCommand cmd = new SqlCommand("SaveInfo2", con))
{
cmd.CommandType = CommandType.StoredProcedure;
//...
con.Open();
cmd.ExecuteNonQuery();
ID2 = Convert.ToInt32(cmd.Parameters["@Ret"].Value);
}
}
}
Блок using
гарантирует, что для ресурса будет вызван метод Dispose
, независимо от того, было ли выброшено исключение.