Domanda

Questa domanda riguarda il WebService ASP.NET che sto creando usando l'architettura DAL-BLL per il mio progetto scolastico finale.

Ho una procedura memorizzata, che è una query di selezione con un join interno per 2 tabelle. Quindi la stored procedure restituisce il valore multi-tabella. Uno dei miei metodi DAL Tableadapter accede a questa procedura memorizzata. Come posso recuperare il valore di ritorno in BLL? Devo creare una struttura di classe simile a quella che dovrebbe essere restituita dal Procen memorizzato? O c'è un modo diretto per raggiungere lo stesso? Aiuta molto apprezzato. Per favore fatemi sapere se qualcuno ha bisogno di applet di codice per ottenere una migliore comprensione. Grazie

Ecco alcune informazioni: Sto usando il set di dati SQL (.xsd) in DAL. Quindi ho un DataTable chiamato "Assicurazione", che ha un tabledapter. Una delle query nel referenze dell'adattatore a una stored procedure, che ha un join interiore. Quindi il mio SP sembra:

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)
.

Quindi questo SP restituisce un datatable che sarà una combinazione delle 2 tabelle nel join interiore. Per favore correggimi se sbaglio.

Ora nel mio BLL, ho:

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

Dove l'instasatore è un'istanza di insurancetalaadapter

Questo fornisce un errore sull'esecuzione. Posso eseguire la SP con successo, quindi penso che il problema sia solo BCZ che sto cercando di restituire un datatraggio sbagliato dal BLL. Per favore aiutami a risolvere questo.

È stato utile?

Soluzione 2

Trovato una soluzione :) Finalmente il lavoro.

Ho creato un nuovo adattatore da tavolo utilizzando il DATAset Designer e ha chiamato la SP come una delle query lì.Il DataTable così creato, ha tutti i campi (da assicurazione e insurrezione) incluso.Ora, ASP.NET può rilevare che il tipo di ritorno è il datatabili appena creato. Funziona come un fascino.

Se c'è un modo migliore per risolverlo, per favore commenta.

Grazie a tutti per il tuo tempo.

Altri suggerimenti

Se si utilizza il set di dati ADO .NET.La procedura guidata creerà sicuramente una tabella per lo stesso.Ora dallo strato DataAccess, effettuare i seguenti passaggi

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. Prendi questa pagina sulla tua pagina dell'interfaccia utente seguendo la creazione dell'oggetto di BLL e chiama il metodo.Qui in BLL puoi anche fare varie operazioni per abbassare i codici in te ui e tenerlo pulito da varie manipolazioni.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top