次のようなコードのメソッドがあるとします。
Dictionary<int, int> results = new Dictionary<int, int>();
try
{
using (SqlConnection sqlConn = new SqlConnection("some connection string"))
{
SqlCommand sqlCmd = new SqlCommand("stored procedure's name here", sqlConn);
sqlCmd.CommandType = CommandType.StoredProcedure;
//sqlCmd.Parameters.Add lines here
sqlConn.Open();
using (SqlDataReader sqlDR = sqlCmd.ExecuteReader())
{
while (sqlDR.Read())
{
results.Add((int)sqlDR["keyColumnName"], (int)sqlDR["valueColumnName"]);
}
}
}
}
catch { }
return results;
ストアド プロシージャは、同じ 1 つのテーブルからサブセレクトを含む select ステートメントであり、複数の行を返しますが、通常は数百以下です。SP が結果をキー列でグループ化し (辞書に重複キーの問題がない)、s を返す (変換に問題がない) と仮定すると、int
他のエラーが発生した場合に部分的な結果のみを返すようにすることは可能ですか?
私はそれが空の catch ブロックであることをよく知っています - もしそれが空でなければ、私はおそらくこの質問をしていないでしょう. また、このコードが空の辞書を返す可能性があることも知っています。SqlDataReader
結果が空でも完全でもないように、例外によって読み取りが中断される可能性があるかどうか疑問に思っていました。
SqlDataReader.Read
また、クエリ結果を一度に読み込むように切り替えてからDataTable.Load(DataReader)
、両方のステートメントの外側で DataTable から結果を入力すると、using
部分的な結果を取得することを回避できるとも言われました (つまり、上記のコードで可能な場合)。しかし、そうでしょうか?とはDataTable.Load
本当に違う働きをしSqlDataReader.Read
ますか?