Проблема с функцией trycatch - PullRequest
0 голосов
/ 05 июля 2011

У меня есть 2 класса. С помощью класса Generic Data Access я могу получить отделы из хранимой процедуры GetDepartments. Моя проблема заключается в том, что в классе доступа к каталогу, и особенно в общедоступной статической DataTable ExecuteSelectCommand (команда DbCommand) (выполнить команду и вернуть результаты в виде объекта DataTable), я не знаю, что я должен написать в цикле CATCH или как выйти из него blank.Can кто-нибудь, пожалуйста, помогите мне завершить эту часть? Или, может быть, как я могу изменить его без Try-catch.

using System;    
using System.Data;    
using System.Data.Common;    
using System.Configuration;    

public static class GenericDataAccess    
{    
  static GenericDataAccess()
  {

  }


  public static DataTable ExecuteSelectCommand(DbCommand command)    
  {    
    DataTable table;

    try    
    { 

      command.Connection.Open();    
      DbDataReader reader = command.ExecuteReader();    
      table = new DataTable();          
      table.Load(reader);          
      reader.Close();        
    }    
    catch (...)    
    {    
      ......
    }    
    finally    
    {         
      command.Connection.Close();    
    }

    return table;    
  }

  public static DbCommand CreateCommand()    
  {    
    string dataProviderName = BalloonShopConfiguration.DbProviderName;   
    string connectionString = BalloonShopConfiguration.DbConnectionString;

    DbProviderFactory factory = DbProviderFactories.GetFactory(dataProviderName);    
    DbConnection conn = factory.CreateConnection();

    conn.ConnectionString = connectionString;

    DbCommand comm = conn.CreateCommand();    
    comm.CommandType = CommandType.StoredProcedure;

    return comm;
  }
}

**The Catalog Access class:**

using System;    
using System.Data;    
using System.Data.Common;

public static class CatalogAccess    
{    
  static CatalogAccess()
  {

  }

  public static DataTable GetDepartments()    
  {    
    DbCommand comm = GenericDataAccess.CreateCommand();

    comm.CommandText = "GetDepartments";

    return GenericDataAccess.ExecuteSelectCommand(comm);    
  }    
}

Ответы [ 3 ]

1 голос
/ 05 июля 2011

Если вы не знаете, что делать или не хотите обрабатывать какие-либо исключения, оставьте с catch. Это действительно:

try
{
    // code here
}
finally
{
    // cleanup here
}

.. таким образом, любые исключения будут переданы методу, вызвавшему ваш метод. Если есть проблема (исключение) в блоке try, метод завершится, но не раньше, чем будет выполнен любой код в finally.

0 голосов
/ 05 июля 2011

При работе с исключениями у вас есть два варианта: вы можете обрабатывать их сейчас, когда они выбрасываются, или вы можете позволить им пузыриться в коде и обрабатывать их позже.Что лучше, зависит от того, что именно делает ваша программа.

То, как вы справитесь с этим, также зависит от вашего кода.Хотите сообщить пользователю?Повторить попытку подключения?И то и другое?Ничего не делать (плохо!)?Допустим, вы просто хотите, чтобы пользователь знал, что случилось что-то плохое.Затем вы должны сделать что-то вроде следующего:

try{
    // breakable stuff
}catch(Exception e){
    System.Windows.Forms.MessageBox.Show("Something broke:  " + e.Message);
}finally{
    // clean up
}

Если вы хотите иметь дело с исключением далее (иначе как в методе, который вызвал это), то выполните следующее:

try{
    // breakable stuff
}catch{
    throw;
}finally{
    // clean up
}
0 голосов
/ 05 июля 2011

Я не уверен, о чем просить, но я подозреваю, что вы не хотите обрабатывать исключение в своей функции и позволять ему распространяться вниз по стеку (т. Е. Разрешать вызывающему обработчику).

Чтобы достичь этого, вы можете просто исключить из кода код catch. Код ниже finally все равно будет вызываться. Если вы хотите обработать исключение в своей функции, но сбросить его перед возвратом, попробуйте:

catch (MyException e)
{
   // Do stuff with e
   throw;
}
...