03. april 2006 - 11:55Der 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.
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?
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
Synes godt om
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()
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å
Synes godt om
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
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
Synes godt om
Slettet bruger
03. april 2006 - 16:06#7
Jeg kan ikke få min GetConnection funktion til at returnere en åben databaseforbindelse?
Synes godt om
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?
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
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.