C#并非所有代码路径都返回值try catch

时间:2011-07-24 22:08:44

标签: c#

我很难弄清楚如何使用以下代码解决错误。在下面的这种情况下,我想将catch中的数据表返回为null。

    public static DataTable DTTable(string mysqlQuery, out DataTable DTTableTable)
    {
        try
        {
            MySqlDataAdapter DataDTTables = new MySqlDataAdapter(mysqlQuery, Connection);
            DataDTTables.SelectCommand.CommandTimeout = 240000;
            DataTable DataDTTablesDT = new DataTable();
            DataDTTables.Fill(DataDTTablesDT);
            DTTableTable = DataDTTablesDT;
            EventLog.WriteEntry(StaticStringClass.crawlerID, "Returning Sucessful datatable query:  "+mysqlQuery);
            return DTTableTable;

        }
        catch (Exception ex)
        {

            string messageString = "Could not fill database for query:  " + mysqlQuery + " because of error:  " + ex.Message.ToString();
            LoggingClass.GenericLogging(messageString);
        }

    }

7 个答案:

答案 0 :(得分:26)

在catch块中,添加一个返回:

catch (Exception ex)
{
    // your code
    return null;
 }

答案 1 :(得分:7)

catch块完成执行后,您不会返回任何内容。

你需要为这种情况返回一些DataTable

public static DataTable DTTable(string mysqlQuery, out DataTable DTTableTable)
{
    DataTable result;
    try
    {
        MySqlDataAdapter DataDTTables = new MySqlDataAdapter(mysqlQuery, Connection);
        DataDTTables.SelectCommand.CommandTimeout = 240000;
        DataTable DataDTTablesDT = new DataTable();
        DataDTTables.Fill(DataDTTablesDT);
        DTTableTable = DataDTTablesDT;
        EventLog.WriteEntry(StaticStringClass.crawlerID, "Returning Sucessful datatable query:  "+mysqlQuery);
        result = DTTableTable;

    }
    catch (Exception ex)
    {
        string messageString = "Could not fill database for query:  " + mysqlQuery + " because of error:  " + ex.Message.ToString();
        LoggingClass.GenericLogging(messageString);
        result = null;
    }
    return result; //<--- executes even if an exception is thrown
}

答案 2 :(得分:2)

public static DataTable DTTable(string mysqlQuery, out DataTable DTTableTable)
{
    try
    {
       ....
    }
    catch (Exception ex)
    {
       ....
    }

    return null;
}

答案 3 :(得分:1)

public static DataTable DTTable(string mysqlQuery, out DataTable DTTableTable)
    {
    DataTable Result = null;
    try
    {
    MySqlDataAdapter DataDTTables = new MySqlDataAdapter(mysqlQuery, Connection);
    DataDTTables.SelectCommand.CommandTimeout = 240000;
    DataTable DataDTTablesDT = new DataTable();
    DataDTTables.Fill(DataDTTablesDT);
    DTTableTable = DataDTTablesDT;
    EventLog.WriteEntry(StaticStringClass.crawlerID, "Returning Sucessful datatable query:  "+mysqlQuery);
    Result =  DataDTTablesDT;
    }
    catch (Exception ex)
    {
    string messageString = "Could not fill database for query:  " + mysqlQuery + " because of error:  " + ex.Message.ToString();
    LoggingClass.GenericLogging(messageString);
    }

return Result;
}

编辑:

版本1(没有输出参数,因为它是多余的):

public static DataTable DTTable(string mysqlQuery)
    {
    DataTable Result = null;
    try
    {
    MySqlDataAdapter DataDTTables = new MySqlDataAdapter(mysqlQuery, Connection);
    DataDTTables.SelectCommand.CommandTimeout = 240000;
    DataTable DataDTTablesDT = new DataTable();
    DataDTTables.Fill(DataDTTablesDT);
    EventLog.WriteEntry(StaticStringClass.crawlerID, "Returning Sucessful datatable query:  "+mysqlQuery);
    Result =  DataDTTablesDT;
    }
    catch (Exception ex)
    {
    string messageString = "Could not fill database for query:  " + mysqlQuery + " because of error:  " + ex.Message.ToString();
    LoggingClass.GenericLogging(messageString);
    }

返回结果; }

版本2 - 不返回值(只是输出参数):

public static void DTTable(string mysqlQuery, out DataTable DTTableTable)
    {
    DTTableTable = null;
    try
    {
    MySqlDataAdapter DataDTTables = new MySqlDataAdapter(mysqlQuery, Connection);
    DataDTTables.SelectCommand.CommandTimeout = 240000;
    DataTable DataDTTablesDT = new DataTable();
    DataDTTables.Fill(DataDTTablesDT);
    EventLog.WriteEntry(StaticStringClass.crawlerID, "Returning Sucessful datatable query:  "+mysqlQuery);
    DTTableTable = DataDTTablesDT;
    }
    catch (Exception ex)
    {
    string messageString = "Could not fill database for query:  " + mysqlQuery + " because of error:  " + ex.Message.ToString();
    LoggingClass.GenericLogging(messageString);
    }
}

答案 4 :(得分:1)

由于备用代码路径是catch块,并且您没有重新抛出异常,因此仍需要返回nullDataTable

您可以在catch块中或之后立即执行此操作。

我还要说out DataTable DTTableTable方法中的DTTable参数是多余且不必要的。

答案 5 :(得分:1)

如果要在catch中返回null,则只需在catch:

中返回null
    catch (Exception ex)
    {
        string messageString = "Could not fill database for query:  " + mysqlQuery + " because of error:  " + ex.Message.ToString();
        LoggingClass.GenericLogging(messageString);
        return null;
    }

答案 6 :(得分:0)

将简单的return语句设置为空值。我希望这可以解决您的问题。