2 つの例外をスローしたいコードがあります。ただし、例外は基本的に同じですが、値が異なります。これらのエラーのどれが発生したかを判断するためのエレガントで一般的な方法を知りたいです。
2 つの try catch を実行できること、またはクエリの成功を判断するためにブール値を設定できることはわかっています。これは 1 つのクエリで実行できることも認識しています。ただし、会社のキーが間違っていたのか、それとも PA ID が間違っていたのかを判断できるようにする必要があります。また、独自の例外を作成し、それにフィールドを追加できることも知っています。残念ながら、これらのどれもが最適な解決策であるとは思えず、これはかなり長い間私を悩ませてきました.
ベストプラクティスに関する情報をいただければ幸いです。
using (var ora = new OracleConnection(Data.ConnectionString))
{
String sqlGetCompanyId = "SELECT COMPANY_ID FROM companies WHERE key = :key";
String sqlValidateDelete = "select * from pa where PA_ID = :paid AND COMPANY_ID = :cid";
ora.Open();
int CompanyId = 0;
using (var Command = ora.CreateCommand())
{
Command.CommandText = sqlGetCompanyId;
Command.Parameters.Add(":key", OracleDbType.Varchar2).Value = cKey;
using (var reader = Command.ExecuteReader(CommandBehavior.SingleRow))
{
if (reader.Read())
CompanyId = unchecked((int)((long)reader["COMPANY_ID"]));
else
throw new ArgumentException("Invalid Company Key");
}
}
using (var Command = ora.CreateCommand())
{
Command.CommandText = sqlValidateDelete;
Command.Parameters.Add(":cid", OracleDbType.Int32).Value = CompanyId;
Command.Parameters.Add(":paid", OracleDbType.Int32).Value = PAID;
using (var reader = Command.ExecuteReader(CommandBehavior.SingleRow))
{
if (!reader.Read())
throw new ArgumentException("Price Agreement Id for this company does not exist");
rv = unchecked((int)((long)reader["ROW_VERSION"]));
}
}
}