Вопрос

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

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

Вот еще несколько информации: Я использую набор данных SQL (.xsd) в DAL. Таким образом, у меня есть DataTable под названием «страховка», который имеет таблицу. Один из запросов в адаптере ссылки на сохраненную процедуру, которая имеет внутреннее соединение. Итак, мой 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 возвращает DataTable, который будет комбинацией 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 - это экземпляр insarancetableadapter

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

Это было полезно?

Решение 2

нашел решение :) Наконец-то получил это работать.

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

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

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

Другие советы

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

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. Поймайте это на вашей странице UI, следуя созданию объекта BLL и вызовите метод.Здесь, в BLL, вы также можете выполнять различные операции, чтобы понизить коды в вашем интерфейсе, и держать ее в чистоте из различных манипуляций.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top