Как вернуть значение объединения нескольких таблиц из BLL - PullRequest
0 голосов
/ 26 июля 2010

Этот вопрос касается веб-службы ASP.NET, которую я создаю с использованием архитектуры DAL-BLL для моего окончательного школьного проекта.

У меня есть хранимая процедура, которая является запросом выбора с внутренним объединением для2 таблицы.Следовательно, хранимая процедура возвращает значение из нескольких таблиц.Один из моих методов DAL tableAdapter обращается к этой хранимой процедуре.Как получить возвращаемое значение в BLL?Должен ли я создать структуру класса, аналогичную той, которая должна быть возвращена хранимой процедурой?или есть прямой способ добиться того же?Помощь очень ценится.Пожалуйста, дайте мне знать, если кому-то нужен апплет кода, чтобы лучше понять.Спасибо

Вот еще немного информации: я использую набор данных SQL (.xsd) в DAL.Итак, у меня есть дата под названием «Страхование», в которой есть таблица Адаптер.Один из запросов в адаптере ссылается на хранимую процедуру, которая имеет внутреннее соединение.Таким образом, мой SP выглядит так:

ALTER PROCEDURE dbo.GetInsurancesPaged
    (
        @startRowIndex int,
        @maximumRows int,
        @patientID int
    )
AS
    select * from
    (
    SELECT Insurance.insuranceID, Insurance.memberID, Insurance.groupID, Insurance.accountType, Insurance.comments, Insurance.patient, Insurance.company, InsuranceCompany.companyID, InsuranceCompany.companyName, InsuranceCompany.address, InsuranceCompany.phone, InsuranceCompany.fax, ROW_NUMBER() over (order by Insurance.dateModified DESC) as ROWRANK
FROM Insurance INNER JOIN InsuranceCompany ON Insurance.company = InsuranceCompany.companyID
WHERE Insurance.patient = @patientID
    )
    AS DataWithRowNumbers
WHERE ROWRANK > @startRowIndex AND ROWRANK <= (@startRowIndex + @maximumRows)

Так что этот SP возвращает таблицу данных, которая будет комбинацией 2 таблиц во внутреннем объединении.Пожалуйста, исправьте меня, если я ошибаюсь.

Теперь в моем BLL у меня есть:

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, true)]
    public mySys.InsuranceDataTable GetInsurancesPaged(int startRowIndex, int maximumRows, int patientID)
    {
       return insAdapter.GetInsurancesPaged(startRowIndex, maximumRows, patientID);
    }

, где insAdapter является экземпляром insuranceTableAdapter

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

Ответы [ 2 ]

0 голосов
/ 30 июля 2010

Нашел решение :) Наконец-то оно заработало.

Я создал новый табличный адаптер с помощью конструктора набора данных и назвал SP одним из запросов.Созданная таким образом база данных содержит все поля (из Insurance и InsuranceCompany).Теперь ASP.NET может определить, что тип возвращаемого значения является вновь созданным.Работает как шарм.

Если есть лучший способ решить эту проблему, пожалуйста, прокомментируйте.

Спасибо всем за ваше время.

0 голосов
/ 26 июля 2010

При использовании набора данных ADO .Net. Мастер обязательно создаст таблицу для того же. Теперь из уровня доступа к данным выполните следующие шаги

1. Create a object of dataset. (DLL)

Private YourCustomeDataSetDatatable  DataAccess()
{
 YourCustomDataSet ds = new YourCustomDataSet();  // also called strongly typed dataset
YourCustomeDataSetDatatable dt = ds.YourCustomeDataSetDatatable ()
YourCustomeDataSetTableAdapter ta = new ds.YourCustomeDataSetTableAdapter (); // table adapter that will be invoked 
ta.Fill(dt); // or if you have set to return only you can also use GetData()
}

2. Now in business layer

Private YourCustomeDataSetDatatable  DataAccess()
{
// create a object of DLL. 
MyDAL myDal = new MyDAL ();
return myDal.DataAccess();
}
  1. Поймайте это на своей странице пользовательского интерфейса, следуя за созданием объекта BLL, и вызовите метод. Здесь, в BLL, вы также можете выполнять различные операции, чтобы снизить количество кодов в вашем интерфейсе и сохранить его в чистоте от различных манипуляций.
...