Avatar billede Slettet bruger
03. april 2006 - 11:55 Der er 10 kommentarer og
1 løsning

Flere lag - eksempel

Hej

Jeg roder lidt rundt i det med at dele applikationen op i 3 lag: DAL, BLL og UI. Men jeg har vist brug for et eksempel (som dog ikke rigtig bruger BLL), men jeg har svært ved at fatte det med at sende data rundt mellem lagene.

Jeg har lavet følgnde asp.net/codebehind side:

<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Afvigelser_index.aspx.vb" Inherits="Afvigelser_index" title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="AreamenuHolder" Runat="Server">
    Areamenu</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContentHolder" Runat="Server">

Ansvarlig for opfølgning:
   
    <asp:DropDownList ID="DropInitialer" runat="server">
    </asp:DropDownList>
        <asp:button ID="Button1" Text="Submit" OnClick="SubmitBtn_Click" runat=server/>

        <p>
       
        <asp:Label id=Label1 font-name="Verdana" font-size="10pt" runat="server" />
 
</asp:Content>

...codebehind:

Imports System.Data
Imports System.Data.OleDb

Partial Class Afvigelser_index
    Inherits System.Web.UI.Page

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

        If Not IsPostBack Then

            Dim drAfdelinger As OleDbDataReader
            Dim GetConnection As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\database.mdb")
            Dim SqlCmd As New OleDbCommand("SELECT * FROM Afdelinger", GetConnection)
            GetConnection.Open()
            drAfdelinger = SqlCmd.ExecuteReader()

            DropInitialer.DataSource = drAfdelinger
            DropInitialer.DataTextField = "Afdelingsnavn"
            DropInitialer.DataValueField = "Afdelingsnr"
            DropInitialer.DataBind()
        End If


    End Sub

    Sub SubmitBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
        Label1.Text = "You chose: " + DropInitialer.SelectedItem.Text
    End Sub

Og nu forestiller jeg mig at jeg vil lave en funktion(?) i min DAL-class der kan hente data (afdelinger) fra databasen ved at kalde en anden funktion i DAL der giver databaseforbindelsen.

Den funktion der henter data i DAL skal så på en eller anden måde bindes til min dropdownlist i codebehindfilen, der så vises på asp.net siden.

Er det ikke sådan man gør? Og kan jeg få vist hvordan det gøres med dette eksempel jeg viser her?
Avatar billede arne_v Ekspert
03. april 2006 - 13:09 #1
noget a la:

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

        If Not IsPostBack Then

            Dim drAfdelinger As OleDbDataReader
            drAfdelinger = minheltegendal.GetAfdelinger

            DropInitialer.DataSource = drAfdelinger
            DropInitialer.DataTextField = "Afdelingsnavn"
            DropInitialer.DataValueField = "Afdelingsnr"
            DropInitialer.DataBind()
        End If

hvor minheltegendal er en instans af din DAL klasse

kunne f.eks. bare være en Shared member i din codebehind klasse
Avatar billede Slettet bruger
03. april 2006 - 13:32 #2
Må jeg gerne få det penslet lidt mere ud, det bliver ved med at drille mig når jeg kalder de forskellige klasser og funkioner:

Det du viser, arne_v - 13:09:20, skal det ikke være i codebehind filen? Og skal min DAL se ud noget i retning af:

Imports Microsoft.VisualBasic
Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class DataHelperClass

    Public Function GetConnection()
        Dim GetConnection As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\database.mdb")
        GetConnection.Open()
    End Function

End Class

Public Class DALClass

    Public Function GetAfdelinger()

        Dim drAfdelinger As OleDbDataReader
        Dim GetConnection As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\database.mdb")
        Dim SqlCmd As New OleDbCommand("SELECT * FROM Afdelinger", GetConnection)
        drAfdelinger = SqlCmd.ExecuteReader()

    End Function

End Class
Avatar billede arne_v Ekspert
03. april 2006 - 14:01 #3
jo

den ene af dine to GetConnection skal vel ikke være der

du skal have en retur type på GetAfdelinger

men ellers var det nok en måde (ud af mange) at gøre det på
Avatar billede Slettet bruger
03. april 2006 - 14:26 #4
Er metoden ok, eller er det stært anbefalesesværdigt at lære sig en anden måde at gøre det på, taget i betragtning at jeg er meget ny?

Jeg er ikke helt med på hvad "shared member" gør, og hvor det skal ind. Det jeg har nu er:

Codebehind:

Imports System.Data
Imports System.Data.OleDb

Partial Class Afvigelser_index
    Inherits System.Web.UI.Page

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

        If Not IsPostBack Then

            Dim drAfdelinger As OleDbDataReader
            drAfdelinger = DALClass.GetAfdelinger
            DropInitialer.DataSource = drAfdelinger
            DropInitialer.DataTextField = "Afdelingsnavn"
            DropInitialer.DataValueField = "Afdelingsnr"
            DropInitialer.DataBind()
        End If


    End Sub

    Sub SubmitBtn_Click(ByVal sender As Object, ByVal e As EventArgs)
        Label1.Text = "You chose: " + DropInitialer.SelectedItem.Text
    End Sub



End Class

Og DAL...

Imports Microsoft.VisualBasic
Imports System
Imports System.Data
Imports System.Data.OleDb

Public Class DataHelperClass

    Public Function GetConnection()
        Dim GetConnection As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\database.mdb")
        GetConnection.Open()
    End Function

End Class

Public Class DALClass

    Public Function GetAfdelinger()

        Dim drAfdelinger As OleDbDataReader
        Dim DbConn As New OleDbConnection
        DbConn = DataHelperClass.GetConnection()
        Dim SqlCmd As New OleDbCommand("SELECT * FROM Afdelinger", DbConn)
        drAfdelinger = SqlCmd.ExecuteReader()
        Return drAfdelinger

    End Function

End Class

PS. Jeg er glad for at du gider...
Avatar billede Slettet bruger
03. april 2006 - 14:26 #5
..eller gad i hvert fald :-)
Avatar billede arne_v Ekspert
03. april 2006 - 15:47 #6
enten skal du:

Public Shared Function GetAfdelinger() ' added shared

eller

Partial Class Afvigelser_index
    Inherits System.Web.UI.Page

    Private Shared dal As DALClass = New DALClass ' ny

    Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

        If Not IsPostBack Then

            Dim drAfdelinger As OleDbDataReader
            drAfdelinger = dal.GetAfdelinger ' aendret
Avatar billede Slettet bruger
03. april 2006 - 16:06 #7
Jeg kan ikke få min GetConnection funktion til at returnere en åben databaseforbindelse?
Avatar billede Slettet bruger
03. april 2006 - 16:10 #8
Jeg kan ikke få min getConnection til at returnere en åben databaseforbindelse og jeg er ikke sikker på hvordan jge skal kalden den i min getafdelinger funktion?
Avatar billede arne_v Ekspert
03. april 2006 - 17:40 #9
Public Function GetConnection()
        Dim res As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA Source=c:\inetpub\wwwroot\database\database.mdb")
        res.Open()
        GetConnection = res
    End Function
Avatar billede Slettet bruger
03. april 2006 - 21:56 #10
Mange tak. Sender du et svar?
Avatar billede arne_v Ekspert
04. april 2006 - 01:16 #11
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Formpipe Software A/S

Senior Product Manager

Politiets Efterretningstjeneste

Datacentertekniker til PET

KMD A/S

SAP Arkitekt