我很难弄清楚如何使用以下代码解决错误。在下面的这种情况下,我想将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);
}
}
答案 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
块,并且您没有重新抛出异常,因此仍需要返回null
或DataTable
。
您可以在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语句设置为空值。我希望这可以解决您的问题。