0

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

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

谢谢。

4

6 回答 6

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;  
    }
}
于 2013-09-25T07:43:53.960 回答
1

我更喜欢以下内容。您对实现 IDisposable 接口的对象使用“使用”。这确保了在使用后,如果出现错误,他们的资源会被释放。我不知道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;
}
于 2013-09-25T07:22:35.823 回答
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
}
于 2013-09-25T06:47:39.277 回答
0

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

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;
    }
}
于 2013-09-25T06:28:58.043 回答
0

你的问题比较模糊。您可以将整个内容包装在 TryCatch 中。或个别命令,取决于您的需要。

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

如果您向我们提示您要实现的目标,而不是捕获错误(可以通过在整个块周围放置 try/catch 来完成),请告诉我们。

于 2013-09-25T06:30:10.860 回答
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();
   }       
}

在您调用函数时检查空数据表以防出现任何错误。

于 2013-09-25T06:38:18.757 回答