Как вернуть данные из базы данных с использованием 3-х уровневой архитектуры с использованием ASP.NET C #

1

Скажем, у меня есть трехуровневое приложение ASP.NET, написанное на С#. Как вы должны правильно использовать DAL, BLL и PL?

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

public DataTable GetCustomerInfo(collection b)
{
    DataTable table;

    try
    {
        string returnValue = string.Empty;
        DB = Connect();
        DBCommand = connection.Procedure("sp_getCust");
        DB.AddInParameter(DBCommand, "@CustomerID", DbType.String, b.CustomerID);

        DbDataReader reader = DBCommand.ExecuteReader();
        table = new DataTable();
        table.Load(reader);
        return table;
    }
    catch (Exception ex)
    {
        throw (ex);
    }
}

Тогда в моем BLL я бы получил эту возвращенную таблицу и заполнил набор данных?

Я попытался заполнить набор данных без моего имени DataTable, "table",

public static DataTable returnCustomer(collection b)
{
    try
    {
           SqlDataAdapter adapt = new SqlDataAdapter();
           DataSet table = new DataSet();

           adapt.Fill(table, "table");
           return table;
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Однако я получаю следующие ошибки:

Изображение 174551

Также: как привязать набор данных, чтобы я мог вернуть данные в мои текстовые поля?

Теги:
datatable
dataset

2 ответа

1
Лучший ответ

DataSet имеет коллекцию таблиц - вам нужно вернуть только первую таблицу из DataSet:

var dataSet = new DataSet();
adapt.Fill(dataSet, "table");
return dataSet.Tables["table"];

Кроме того, не делайте этого, поскольку он разрушает стек:

catch (Exception ex)
{
     throw (ex);
}

Если вы не собираетесь выполнять обработку исключений, то полностью удалите try/catch. Если вы собираетесь делать обработку, а затем повторно поднимать, то либо просто throw, либо обертываете и бросаете (например, throw new SomeException("Wrapped", ex);)

Наконец, обратите внимание, что многие объекты в вашем DAL являются IDisposable - все должны быть удалены DataReaders, SqlConnection и SqlCommand - я бы рекомендовал обернуть вызов в области using.

  • 0
    Re: Как связать DataTable с пользовательским интерфейсом Asp.Net - вы не упомянули, WebForms или MVC, но вот базовый пример в WebForms
  • 0
    вебформы ....
Показать ещё 2 комментария
0

У меня есть BL (Business Layer) и DAL (уровень доступа к данным) в одном классе.

Например, у меня есть один столбец "Clarity_Master" в моей базе данных. Итак, я добавлю один класс в визуальную студию под названием "Clarity_BLL.cs",

Clarity_BLL.cs

namespace DAL
{
  public class Clarity_BLL
  {
    public int PURITY_ID { get; set; }
    public string PURITY_NAME { get; set; }
    public string PURITY_CODE { get; set; }
    public int DISPLAY_ORDER { get; set; }
    public bool IDELETE { get; set; }

    public DataTable GET_CLARITYBYNAME()
    {
        ExceptionManager exManager;
        exManager = EnterpriseLibraryContainer.Current.GetInstance<ExceptionManager>();
        DataTable dt = null;
        try
        {
            exManager.Process(() =>
            {
                Database sqlDatabase = DBConnection.Connect();
                DataSet ds = sqlDatabase.ExecuteDataSet("StoreProcedureName",PURITY_NAME_Para1, IDELETE_Para2);
                dt = ds.Tables[0];
            }, "Policy");
        }
        catch (Exception ex)
        {
            throw ex;
        }
        return dt;
    }
  }
 }

И используйте эти классы BL & DAL, как показано ниже в моем PL (Presentation Layer).

Clarity_MST.aspx.cs

public void bindgrid()
    {
        Clarity_BLL obj_CLARITY_BLL = new Clarity_BLL();
        obj_CLARITY_BLL.PURITY_ID = 0;
        obj_CLARITY_BLL.IDELETE = true;
        grdClarity.DataSource = obj_CLARITY_BLL.GET_CLARITYBYNAME();
        grdClarity.DataBind();
    }

Пожалуйста, дай мне знать, если возникнут какие-либо вопросы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню