只有一个例外,Catch退出

tyl*_*hes 1 c# stringbuilder append try-catch

在我下面显示的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();
    }
Run Code Online (Sandbox Code Playgroud)

我注意到如果我输入6个单词,其中3个应该正常工作,3个应该被catch语句捕获,catch语句只能捕获最后一个.知道为什么它只能抓住其中一个词吗?我喜欢它捕获所有这些并将它们全部添加到StringBuilder badData.

Jef*_* D. 5

您确实不应该使用try/catch和exception机制来确定数据在这种普通情况下的有效性.这就是为什么它被称为"异常",因为它旨在处理可能导致程序崩溃的特殊情况.如果您希望某个百分比的输入无效,那么请对其进行普通的逻辑测试.

 if (valid(word) {function(word);} else {addToErrorList(word);} 
Run Code Online (Sandbox Code Playgroud)