尝试catch返回一个值方法

时间:2013-09-25 06:27:08

标签: c# try-catch

我怎么能在这里使用try catch函数?

public DataTable BindRole()
{  
    Database _database = DatabaseFactory.CreateDatabase();
    DbCommand dbCommand = _database.GetSqlStringCommand(QMROLE.FetchData);
    DataSet _ds = _database.ExecuteDataSet(dbCommand);
    return _ds.Tables[0];      
}

感谢。

6 个答案:

答案 0 :(得分:2)

public DataTable BindRole() 
{
    try  
    {  
        Database _database = DatabaseFactory.CreateDatabase();  
        DbCommand dbCommand = _database.GetSqlStringCommand(QMROLE.FetchData);  
        DataSet _ds = _database.ExecuteDataSet(dbCommand);  
        return _ds.Tables[0];    
    }  
    catch (Exception ex)  
    {  
        return null;  
    }
}

答案 1 :(得分:1)

当一个函数返回任何值然后在捕获异常后返回null,这将有用,如下所示。

public DataTable BindRole()
{
   try
   {
       Database _database = DatabaseFactory.CreateDatabase();
       DbCommand dbCommand = _database.GetSqlStringCommand(QMROLE.FetchData);
       DataSet _ds = _database.ExecuteDataSet(dbCommand);
       return _ds.Tables[0];
   }
   catch
   {
       return null;
   }
}

现在使用这种方法。

Datatable resultantTable = BindRole();
if ( resultantTable != null )
{
     // Do what you want with this datatable
}

答案 2 :(得分:1)

我更愿意接受以下内容。您对实现IDisposable接口的对象使用'using'。这确保了,在使用之后,并且在出错时,他们的资源被释放。我不知道Database对象,但如果它也实现了IDisposable,那么使用'using',否则只需使用周围的try-catch,并在finally中执行清理任务。 我通常选择在方法的顶部创建返回变量及其默认值,并在结尾处返回它。所以你总是在最后获得变量的实际状态。

public DataTable BindRole()
{
    DataTable dataTable = new DataTable();

    try
    {
        Database _database = DatabaseFactory.CreateDatabase();

        using (DbCommand dbCommand = _database.GetSqlStringCommand(QMROLE.FetchData))
        {
            using (DataSet _ds = _database.ExecuteDataSet(dbCommand))
            {
                dataTable = _ds.Tables[0];
            }
        }
    }
    catch
    {
    }
    finally
    {
        // perform cleanup
    }

    return dataTable;
}

答案 3 :(得分:0)

使用“throw或”返回null“或返回一个新的空对象。我建议抛出,除了你在catchblock中处理异常(fe log it)。不要捕获异常并重新抛出它(除非你有你的原因)

catch (Exception error) { throw error;} 

导致在这种情况下原始堆栈跟踪丢失。

public DataTable BindRole()
 {
   try
    {
       Database _database = DatabaseFactory.CreateDatabase();
       DbCommand dbCommand = _database.GetSqlStringCommand(QMROLE.FetchData);
       DataSet _ds = _database.ExecuteDataSet(dbCommand);
       return _ds.Tables[0];
    }
   catch
    {
       throw;
    }
}

答案 4 :(得分:0)

你的问题很模糊。您可以将整个事物包装在TryCatch中。或个别命令,视您的需要而定。

或者你是否问如果其中一个命令出现错误,应该在catch中做些什么来清理?

如果您给我们一个关于您要实现的目标的提示,除了捕获错误(可以通过将try / catch放在整个块之外),请告诉我们。

答案 5 :(得分:0)

你可以这样使用

public DataTable BindRole()
{  
   DataSet _ds = new DataSet();
   try
   {
    Database _database = DatabaseFactory.CreateDatabase();
    DbCommand dbCommand = _database.GetSqlStringCommand(QMROLE.FetchData);
    DataSet _ds = _database.ExecuteDataSet(dbCommand);    
    return _ds.Tables[0];
   }
   catch(Exeption Ex)
   {
    // either trow the exception or 
    // return an empty datatable here
    return new DataTable();
   }       
}

在调用函数时检查空数据表是否有错误。