以下に示す私のtry/catchでは、アプリケーションはユーザーがテキストボックスに入力した単語をループします。(この部分が機能することはすでに確認済みです。)単語をループするときに、各単語に以下の関数を渡します。
private string runQuery(string data)
{
// Step 1 - Declare the query and parameters
SqlCeConnection connection = new SqlCeConnection(@"Data Source=keywordDB.sdf");
SqlCeCommand cmd = new SqlCeCommand("SELECT abbrev, description FROM abbreviations WHERE abbrev LIKE @abbrev", connection);
cmd.Parameters.AddWithValue("@abbrev", data);
SqlCeDataReader reader;
try
{
// Step 2 - Opens the connection
connection.Open();
// Step 3- Execute query and assign the data to abbrevQueryResult and results
reader = cmd.ExecuteReader();
reader.Read();
abbrevQueryResult = reader[0].ToString();
results = reader[1].ToString();
// Step 4 compare abbrevQueryResult to data entered by user in textbox
if (abbrevQueryResult.ToLower().Equals(data.ToLowerInvariant()))
{
returnResults.Append(" " + results + ",");
}
}
catch (InvalidOperationException e)
{
badData = new StringBuilder();
badData.Append(" " + data);
}
finally
{
if (connection != null)
{
connection.Close();
}
}
return returnResults.ToString();
}
6つの単語を入力すると、そのうち3つは正常に機能し、3つはcatchステートメントによってキャッチされ、catchステートメントは最後の1つだけをキャッチすることに気付きました。なぜそれが単語の1つだけを捕らえるのか考えますか?それらすべてをキャッチして、StringBuilderbadDataに追加したいと思います。