Avatar billede Slettet bruger
25. april 2006 - 17:09 Der er 39 kommentarer og
1 løsning

Hente en record fra med DAL over BLL med id fra QueryString

Da jeg regner med at jeg skal bruge en hel del hjælp til dette, sætter jeg point højt.

Jeg har en show.aspx side med en .VB codebehind fil. Jeg navigere ind på siden ved at trykke på et link, som i url hedder show.aspx?ID=1.

Nu vil jeg gerne sende id=1 til mit BLL, som skal bede DAL om at hente VSDok med id = 1.

Jeg mangler både mit BLL og min apsx-side med codebehind. Jeg vil meget gerne se noget kode, da jeg har prøvet rigtig meget, men ikke helt forsår det.


Håber det er til at forstå.
På forhånd tak.

Her kommer noget kode:

DAL:
Namespace DAL
Public Class VSDok
        Private _id As Integer
        Private _kapitel As String
        Private _sektion As String
        Private _dokument As String
        Private _instruksBilag As String
        Private _dokumentnavn As String
        Private _formaal As String
        Private _gyldighedsomraade As String
        Private _ansvar As String
        Private _definitioner As String
        Private _dokumentText As String
        Private _henvisninger As String
        Private _udgavenr As String
        Private _undtagelser As String


        Public Property Id() As Integer
            Get
                Return _id
            End Get
            Set(ByVal value As Integer)
                _id = value
            End Set
        End Property

        Public Property Kapitel() As String
            Get
                Return _kapitel
            End Get
            Set(ByVal value As String)
                _kapitel = value
            End Set
        End Property

        Public Property Sektion() As String
            Get
                Return _sektion
            End Get
            Set(ByVal value As String)
                _sektion = value
            End Set
        End Property

        Public Property Dokument() As String
            Get
                Return _dokument
            End Get
            Set(ByVal value As String)
                _dokument = value
            End Set
        End Property

        Public Property Instruksbilag() As String
            Get
                Return _instruksBilag
            End Get
            Set(ByVal value As String)
                _instruksBilag = value
            End Set
        End Property

        Public Property DokumentNavn() As String
            Get
                Return _dokumentnavn
            End Get
            Set(ByVal value As String)
                _dokumentnavn = value
            End Set
        End Property

        Public Property Formaal() As String
            Get
                Return _formaal
            End Get
            Set(ByVal value As String)
                _formaal = value
            End Set
        End Property

        Public Property Gyldighedsomraade() As String
            Get
                Return _gyldighedsomraade
            End Get
            Set(ByVal value As String)
                _gyldighedsomraade = value
            End Set
        End Property

        Public Property Ansvar() As String
            Get
                Return _ansvar
            End Get
            Set(ByVal value As String)
                _ansvar = value
            End Set
        End Property

        Public Property Definitioner() As String
            Get
                Return _definitioner
            End Get
            Set(ByVal value As String)
                _definitioner = value
            End Set
        End Property

        Public Property DokumentText() As String
            Get
                Return _dokumentText
            End Get
            Set(ByVal value As String)
                _dokumentText = value
            End Set
        End Property

        Public Property Henvisninger() As String
            Get
                Return _henvisninger
            End Get
            Set(ByVal value As String)
                _henvisninger = value
            End Set
        End Property

        Public Property Udgavenr() As String
            Get
                Return _udgavenr
            End Get
            Set(ByVal value As String)
                _udgavenr = value
            End Set
        End Property

        Public Property Undtagelser() As String
            Get
                Return _undtagelser
            End Get
            Set(ByVal value As String)
                _undtagelser = value
            End Set
        End Property

        Public Sub New()

        End Sub

        Public Sub New(ByVal id As Integer, ByVal Kapitel As String, ByVal Sektion As String, ByVal Dokument As String, ByVal InstruksBilag As String, ByVal DokumentNavn As String, ByVal Formaal As String, ByVal Gyldighedsomraade As String, ByVal Ansvar As String, ByVal Definitioner As String, ByVal Beskrivelse As String, ByVal Henvisninger As String, ByVal Udgavenr As String, ByVal Undtagelser As String)
            _id = id
            _kapitel = Kapitel
            _sektion = Sektion
            _dokument = Dokument
            _instruksBilag = InstruksBilag
            _dokumentnavn = DokumentNavn
            _formaal = Formaal
            _gyldighedsomraade = Gyldighedsomraade
            _ansvar = Ansvar
            _definitioner = Definitioner
            _dokumentText = DokumentText
            _henvisninger = Henvisninger
            _udgavenr = Udgavenr
            _undtagelser = Undtagelser

        End Sub

    End Class


    Public Interface IVSBookDB
        Function GetVSDok() As VSDok
        Function CreateVSDok(ByVal VSDokument As VSDok) As Integer
    End Interface


    Public Class VSBookDB
        Implements IVSBookDB

        Public Function GetVSDok() As VSDok Implements IVSBookDB.GetVSDok

            Dim DBConn As DataHelperClass = New DataHelperClass
            Dim Conn As OleDbConnection = DBConn.GetConnection()
            Dim SqlCmd As New OleDbCommand("SELECT ID, Kapitel, Sektion, Dokument, InstruksBilag, Dokumentnavn, Formaal, Gyldighedsomraade, Ansvarlig, Definitioner, DokumentText, Henvisninger, UdgaveNr, Undtagelser FROM VSBog WHERE id =1", Conn)
            Dim Reader As OleDbDataReader = SqlCmd.ExecuteReader
            Dim objVSDok As New VSDok
            While Reader.Read
                objVSDok.Id = Convert.ToInt32(Reader("ID"))
                If Not Reader(1) Is DBNull.Value Then
                    objVSDok.Kapitel = Convert.ToString(Reader("Kapitel"))
                Else
                    objVSDok.Kapitel = ""
                End If
                If Not Reader(2) Is DBNull.Value Then
                    objVSDok.Sektion = Convert.ToString(Reader("Sektion"))
                Else
                    objVSDok.Sektion = ""
                End If
                If Not Reader(3) Is DBNull.Value Then
                    objVSDok.Dokument = Convert.ToString(Reader("Dokument"))
                Else
                    objVSDok.Dokument = ""
                End If
                If Not Reader(4) Is DBNull.Value Then
                    objVSDok.Instruksbilag = Convert.ToString(Reader("InstruksBilag"))
                Else
                    objVSDok.Instruksbilag = ""
                End If
                If Not Reader(5) Is DBNull.Value Then
                    objVSDok.DokumentNavn = Convert.ToString(Reader("DokumentNavn"))
                Else
                    objVSDok.DokumentNavn = ""
                End If
                If Not Reader(6) Is DBNull.Value Then
                    objVSDok.Formaal = Convert.ToString(Reader("Formaal"))
                Else
                    objVSDok.Formaal = ""
                End If
                If Not Reader(7) Is DBNull.Value Then
                    objVSDok.Gyldighedsomraade = Convert.ToString(Reader("Gyldighedsomraade"))
                Else
                    objVSDok.Gyldighedsomraade = ""
                End If
                If Not Reader(8) Is DBNull.Value Then
                    objVSDok.Ansvar = Convert.ToString(Reader("Ansvarlig"))
                Else
                    objVSDok.Ansvar = ""
                End If
                If Not Reader(9) Is DBNull.Value Then
                    objVSDok.Definitioner = Convert.ToString(Reader("Definitioner"))
                Else
                    objVSDok.Definitioner = ""
                End If
                If Not Reader(10) Is DBNull.Value Then
                    objVSDok.DokumentText = Convert.ToString(Reader("DokumentText"))
                End If
                If Not Reader(11) Is DBNull.Value Then
                    objVSDok.Henvisninger = Convert.ToString(Reader("Henvisninger"))
                Else
                    objVSDok.Henvisninger = ""
                End If
                If Not Reader(12) Is DBNull.Value Then
                    objVSDok.Udgavenr = Convert.ToString(Reader("UdgaveNr"))
                Else
                    objVSDok.Udgavenr = ""
                End If
                If Not Reader(13) Is DBNull.Value Then
                    objVSDok.Undtagelser = Convert.ToString(Reader("Undtagelser"))
                Else
                    objVSDok.Undtagelser = ""
                End If
            End While

            Reader.Close()
            Reader = Nothing
            Conn.Close()
            Conn = Nothing
            Return objVSDok
        End Function
End Class
End Namespace
Avatar billede arne_v Ekspert
26. april 2006 - 03:16 #1
Public Interface IVSBookDB
        Function GetVSDok() As VSDok
        Function CreateVSDok(ByVal VSDokument As VSDok) As Integer
    End Interface


    Public Class VSBookDB
        Implements IVSBookDB

        Public Function GetVSDok() As VSDok Implements IVSBookDB.GetVSDok

            Dim DBConn As DataHelperClass = New DataHelperClass
            Dim Conn As OleDbConnection = DBConn.GetConnection()
            Dim SqlCmd As New OleDbCommand("SELECT ID, Kapitel, Sektion, Dokument, InstruksBilag, Dokumentnavn, Formaal, Gyldighedsomraade, Ansvarlig, Definitioner, DokumentText, Henvisninger, UdgaveNr, Undtagelser FROM VSBog WHERE id =1", Conn)

må skulle være


    Public Interface IVSBookDB
        Function GetVSDok(ByVal id As Integer) As VSDok
        Function CreateVSDok(ByVal VSDokument As VSDok) As Integer
    End Interface


    Public Class VSBookDB
        Implements IVSBookDB

        Public Function GetVSDok(ByVal id As Integer) As VSDok Implements IVSBookDB.GetVSDok

            Dim DBConn As DataHelperClass = New DataHelperClass
            Dim Conn As OleDbConnection = DBConn.GetConnection()
            Dim SqlCmd As New OleDbCommand("SELECT ID, Kapitel, Sektion, Dokument, InstruksBilag, Dokumentnavn, Formaal, Gyldighedsomraade, Ansvarlig, Definitioner, DokumentText, Henvisninger, UdgaveNr, Undtagelser FROM VSBog WHERE id = " & id, Conn)
Avatar billede arne_v Ekspert
26. april 2006 - 03:23 #2
nu antager jeg at du bruger samme data klasser PL-BLL som BLL-DAL

du laver en BLL klasse som:
  - har en instans af din DAL klasse
  - har en GetVSDok metode (kan godt have flere argumenter hvis du skal bruge noget info)

dens GetVSDok metode kalder DAL GetVSDok, men kan derudover godt lave
andre ting:
  - implementere en cache
  - checke for adgang til data
  - lav elogning
  etc.etc.

i din code behind:
  - har du en instans af BLL

I en page load eller click metode kalder du BLL GetVSDok og putter data
på din side på en eller anden måde
Avatar billede Slettet bruger
26. april 2006 - 09:56 #3
Noget ala:

Namespace BLL
    Public Class VSBookManager
        Dim objDAL As IVSBookDB = New VSBookDB()

        Public Function GetVsDok(ByVal id As Integer) As VSDok
            Dim objVSDok As VSDok = New VSDok
            objVSDok = objDAL.GetVSDok(id As Integer)??
            ???????????
            Return objVSDok
        End Function

  End Class
End Namespace

----**----

Jeg kan ikke rigtig se hvordan jeg får id'et fra QueryString hen til codebehind og videre til BLL og DAL??
Avatar billede arne_v Ekspert
26. april 2006 - 13:21 #4
din code behind fisker det ud af query string og sender det med i i argumentet til
GetVSDok (det som jeg tilføjede)
Avatar billede Slettet bruger
03. maj 2006 - 12:19 #5
Hmm... jeg kan ikke få det til at virker. Her er min codebehind, hvor jeg prøver at hive id fra querystring og sende det med:

Imports System
Imports BLL

Partial Class VS_Show
    Inherits System.Web.UI.Page

    Sub Page_Load()
        If Not IsPostBack Then

            Dim id As Integer
            id = CInt(Request.QueryString("ID"))

            Dim objBLL As New VSBookManager()
            Dim VSDokCache As New DAL.VSDok
            VSDokCache = objBLL.GetVsDok(ByVal id As Integer) As DAL.VSDok
        End If
    End Sub
End Class

...og her er min BLL

Imports Microsoft.VisualBasic
Imports DAL
Namespace BLL

    Public Class AfdelingManager
        Dim ObjDAL As IRSDAfdelingDB = New RSDAfdelingerDB()

        Public Function GetAllRSDAfdeling() As ArrayList
            'Laver Cache af arraylist
            Dim RSDAfdelingerSource As ArrayList = CType(HttpContext.Current.Cache("AllRSDAfdelingCache"), ArrayList)
            If RSDAfdelingerSource Is Nothing Then
                RSDAfdelingerSource = ObjDAL.GetAllRSDAfdeling()
                HttpContext.Current.Cache("AllRSDAfdelingCache") = RSDAfdelingerSource
            End If
            Return RSDAfdelingerSource
        End Function
    End Class

    Public Class VSBookManager
        Dim objDAL As IVSBookDB = New VSBookDB()

        Public Function GetVsDok(ByVal id As Integer) As VSDok
            Dim objVSDok As VSDok = New VSDok
            objVSDok = objDAL.GetVSDok(ByVal id As Integer)
            Return objVSDok
        End Function

    End Class
End Namespace
Avatar billede Slettet bruger
03. maj 2006 - 14:34 #6
Er det sort det jeg har lavet?
Avatar billede arne_v Ekspert
04. maj 2006 - 02:54 #7
id = CInt(Request.QueryString("ID"))

skulle nok være

id = Integer.Parse(Request.QueryString("ID"))

for at vær emere .NET'sk
Avatar billede arne_v Ekspert
04. maj 2006 - 02:54 #8
VSDokCache = objBLL.GetVsDok(ByVal id As Integer) As DAL.VSDok

skal vel kun være

VSDokCache = objBLL.GetVsDok(id) As DAL.VSDok
Avatar billede arne_v Ekspert
04. maj 2006 - 02:57 #9
objVSDok = objDAL.GetVSDok(ByVal id As Integer)

skal vel være

objVSDok = objDAL.GetVSDok(id)
Avatar billede arne_v Ekspert
04. maj 2006 - 02:58 #10
og

            Dim objVSDok As VSDok = New VSDok
            objVSDok = objDAL.GetVSDok(id)
            Return objVSDok

kan forkortes til

            Return objDAL.GetVSDok(id)
Avatar billede Slettet bruger
05. maj 2006 - 16:58 #11
Tak.

Nu vil jeg også gerne den anden vej. Dvs. jeg vil gerne oprette en ny reord i en database på baggrund af en række tekstbokse.

Jeg forestiller mig at jeg i min aspx side har en tekstboks. Den skal vel på en eller anden måde sendes til min codebehind, der sender det til mit BLL, der sender det til mit DAL

Jeg har textboxen, men er ikke sikker på hvordan jeg får det til mit codebehind.

Mit BLL er

Public Function CreateAfvigelse(ByVal overskrift As String) As Integer
            Dim Id As Integer
            Dim objDAL As IAfvigelse = New AfvigelserDB()
            Id = objDAL.CreateAfvigelse(New Afvigelse(overskrift))
            Return Id
        End Function

Mit DAL:
Public Function CreateAfvigelse() As Object Implements IAfvigelse.CreateAfvigelse

    Dim DBConn As DataHelperClass = New DataHelperClass
            Dim Conn As OleDbConnection = DBConn.GetConnection()
            Dim SqlCmd As New OleDbCommand("Insert Overskrift INTO Afvigelser, Conn)

End function

Noget i den retning?
Avatar billede arne_v Ekspert
06. maj 2006 - 04:36 #12
din code behind har automask adgang til controller i .aspc siden

men ellers ser det vist meget fornuftigt ud

der mangler argument i erklæringen af DAL CreateAfvigelse og SQL'en skal
naturligvis rettes til korrekt SQL syntax

husk og brug parameters i din SQL

rent æstetisk kan jeg ikke lide blandinger af dansk og engelsk som i CreateAfvigelse

og for at berettige et BLL må det skulle lave et eller andet andet end at kalde DAL
Avatar billede Slettet bruger
08. maj 2006 - 09:31 #13
Hej Arne_V

Takker - det er super godt med alt den hjælp og alle de hints, også de æstetiske. Jeg prøve dog lige at komme igenne med denne test, inden jeg ændre navnene.

Jeg er helt blank på hvordan jeg får mit argument fra min textbox i min codebehind og videre??

Og når oprettelsen er sket, hvordan jeg så får hentet det korrekte id??

Min aspx (textbox):

  <asp:TextBox ID="overskrift_txt" runat="server"></asp:TextBox>

Min codebehind:

tom...????

Mit BLL:

    Public Class AfvigelseManager

        Public Function CreateAfvigelse(ByVal overskrift As String) As Integer
            Dim id
            Dim objDAL As IAfvigelse = New AfvigelserDB()

            id = objDAL.CreateAfvigelse(overskrift)
            Return Id
        End Function

    End Class

Mit DAL:

        Public Function CreateAfvigelse(ByVal Overskrit As String) As Object Implements IAfvigelse.CreateAfvigelse

            Dim id As Integer
            Dim DBConn As DataHelperClass = New DataHelperClass
            Dim Conn As OleDbConnection = DBConn.GetConnection()
            Dim SqlCmd As OleDbCommand
            Dim SqlInsert As String
            SqlInsert = "Insert Into Afvigelser ( Overskrift ) Values ( @Overskrift )"
            SqlCmd = New OleDbCommand(SqlInsert, Conn)
            SqlCmd.Parameters.Add("@Overskrift", Overskrift_txt.Text)
            SqlCmd.ExecuteNonQuery()
            Conn.Close()
            Conn = Nothing
            Return id

        End Function

På forhånd tak.
Avatar billede arne_v Ekspert
09. maj 2006 - 04:52 #14
jeg poster lige et eksempel jeg lavede engang (jeg har vist nævnt det før)
Avatar billede arne_v Ekspert
09. maj 2006 - 04:52 #15
<%@ Page Inherits="PL.Transfer" %>
<html>
<head>
<title>Money transfer</title>
</head>
<body>
<form id="f" method="post" runat="server">
From account: <asp:TextBox id="fromaccount" runat="server"/>
<br>
To account: <asp:TextBox id="toaccount" runat="server"/>
<br>
Amount: <asp:TextBox id="amount" runat="server"/>
<br>
<asp:Button id="transfer" text="Transfer" runat="server"/>
<br>
<asp:Label id="status" runat="server"/>
</form>
</body>
</html>
Avatar billede arne_v Ekspert
09. maj 2006 - 04:53 #16
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls

Imports BLL

Namespace PL

    Public Class Transfer
    Inherits Page
        Protected fromaccount As TextBox
        Protected toaccount As TextBox
        Protected amount As TextBox
        Protected transfer As Button
        Protected status As Label
        Private tm As TransferManager

        Protected Overloads Overrides Sub OnInit(ByVal e As EventArgs)
            MyBase.OnInit(e)
            AddHandler transfer.Click, AddressOf transfer_Click
            tm = TransferManagerFactory.Create("strict")
        End Sub

        Protected Sub transfer_Click(ByVal sender As Object, ByVal e As EventArgs)
            If tm.ExecuteTransfer(New TransferData(fromaccount.Text, toaccount.Text, Decimal.Parse(amount.Text))) Then
                fromaccount.Text = ""
                toaccount.Text = ""
                amount.Text = ""
                status.Text = "Money transferred"
            Else
                status.Text = "Money not transferred"
            End If
        End Sub
    End Class
End Namespace
Avatar billede arne_v Ekspert
09. maj 2006 - 04:54 #17
Det er ASP.NET 1.1 ikke 2.0 men ideen må også virke i 2.0

idpådintextbox.Text indeholder værdien i din code behind
Avatar billede Slettet bruger
10. maj 2006 - 12:02 #18
Nu ser min lille test ud som følger og det virker. Har du nogen kommentare ud over det med navngivningen af variable??

Det er godt nok ikke lykkedes mig at returnere id'et på den netop oprettet record?

codebehind:

Protected Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim am As New AfvigelseManager
        If am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text)) Then
            status.Text = "Money transferred"
        Else
            status.Text = "Money not transferred"
        End If
    End Sub


BLL:

    Public Class AfvigelseTransferData
        Private _overskrift As String

        Public Sub New()

        End Sub

        Public Sub New(ByVal overskrift As String)
            _overskrift = overskrift
        End Sub

        Public Property overskrift() As String
            Get
                Return _overskrift
            End Get
            Set(ByVal value As String)
                _overskrift = value
            End Set
        End Property

    End Class


    Public Class AfvigelseManager

        Public Function GetAfvigelse(ByVal id As Integer) As Afvigelse
            Dim objDAL As IAfvigelse = New AfvigelserDB()
            Return objDAL.GetAfvigelse(id)
        End Function

        Public Function GetAfvigelser() As ArrayList
            Dim objDAL As IAfvigelse = New DAL.AfvigelserDB
            Return objDAL.GetAfvigelser
        End Function

        Public Function CreateAfvigelse(ByVal tav As AfvigelseTransferData) As Integer
            'Her kan der laves noget kontrol af data....
            Dim id
            id = 10 ' dette blot en test. Id bør jo være id'et fra db på den netop oprettet record
            Dim objData As New Afvigelse()
            Dim objDal As IAfvigelse = New AfvigelserDB
            objData.Overskrift = tav.overskrift

            objDal.CreateAfvigelse(objData)

            Return id
        End Function

    End Class


DAL:

  Public Class Afvigelse
        Private _id As Integer
        Private _Overskrift As String

        Public Property id() As Integer
            Get
                Return _id
            End Get
            Set(ByVal value As Integer)
                _id = value
            End Set
        End Property

        Public Property Overskrift() As String
            Get
                Return _Overskrift
            End Get
            Set(ByVal value As String)
                _Overskrift = value
            End Set
        End Property

    End Class

    Public Interface IAfvigelse
        Function GetAfvigelse(ByVal id As Integer) As Afvigelse
        Function GetAfvigelser() As ArrayList
        Function UpdateAfvigelse(ByVal id As Integer)
        Function CreateAfvigelse(ByVal objdata As Afvigelse)
    End Interface

    Public Class AfvigelserDB
        Implements IAfvigelse

    Public Function CreateAfvigelse(ByVal objdata As Afvigelse) As Object Implements IAfvigelse.CreateAfvigelse

            Dim id As Integer
            Dim DBConn As DataHelperClass = New DataHelperClass
            Dim Conn As OleDbConnection = DBConn.GetConnection()
            Dim SqlCmd As OleDbCommand
            Dim SqlInsert As String
            SqlInsert = "Insert Into Afvigelser ( Overskrift ) Values ( @Overskrift )"
            SqlCmd = New OleDbCommand(SqlInsert, Conn)
            SqlCmd.Parameters.AddWithValue("@Overskrift", objdata.Overskrift)
            SqlCmd.ExecuteNonQuery()
            Conn.Close()
            Conn = Nothing
            Return id

        End Function

    End Class
Avatar billede Slettet bruger
10. maj 2006 - 13:31 #19
Jeg har lige et spm til:

Er det almindeligt at man kun har et namespace for DAL og kun et for BLL?
Avatar billede arne_v Ekspert
11. maj 2006 - 00:32 #20
der skal vist også lige fjernes noget "Money transferred" etc.

+ lidt kommentarer til koden
Avatar billede arne_v Ekspert
11. maj 2006 - 00:32 #21
id på det indsatte kan du finde ved at udføre en

SELECT @@IDENTITY

og returnerer resultatet fra den
Avatar billede arne_v Ekspert
11. maj 2006 - 00:36 #22
opdeling i namespaces afhænger af størrelsen af koden

jeg kan godt lide 1 DLL = 1 namespace = 1 source fil fordi så kan man finde tingene

1 lag = 1 eller flere DLL giver også mening

men om et lag skal bestå af en DLL/namespace eller flere må afhænge lidt af
kode mængden

hvis koden bliver for stor så splitter man den op

og det er kun min måde at opdele på - der er også andre
Avatar billede Slettet bruger
11. maj 2006 - 12:03 #23
Hej

Tak.

Ja - jeg er godt klar over de småting som "Monet transferred", jeg har kopieret lidt fra dine eksempler.

Men min overførsel hen over BLL er altså fin nok?
Avatar billede arne_v Ekspert
11. maj 2006 - 12:59 #24
ja

jeg regner med at der skal lidt mere kød på BLL hen af vejen (fordi nu er det
jo mest passthrough til DAL)
Avatar billede Slettet bruger
11. maj 2006 - 15:29 #25
Ja - klart :-)

Nu prøver jeg lige at få det med at få ideet retur til at virke, og derefter vil jeg sige tak for denne gang (læs: til dette spørgsmål). Jeg syntes jeg så småt er ved at få lidt hul på det.
Avatar billede Slettet bruger
13. maj 2006 - 00:39 #26
Nu får jeg også et id retur - det er jo super.
Tak for vejledning.
Sender du et svar?
Avatar billede arne_v Ekspert
13. maj 2006 - 00:54 #27
ok
Avatar billede Slettet bruger
15. maj 2006 - 22:57 #28
Hej - jeg ved godt at dette spm er lukket, men jeg har opdaget en fejl, som jeg håber du kan/vil hjælpe med.

Jeg vil jo modtage mit id retur, men jeg opdagede at jeg havde fået det lavet på en måde så jeg oprettede 4 records hver gang jeg trykkede på knappen. Nu har jeg fået det ned på to gange. Jeg kan godt se at det går galt i mit codebehind, men jeg kan ikke se hvordan jeg skal få ideet frem til mit codebehind. Se her:

Mit DAL returnere et id ved:

                Dim cmd As New OleDbCommand("SELECT @@IDENTITY", Conn)
                Dim lastId As Integer
                lastId = cmd.ExecuteScalar
                Conn.Close()
                Conn = Nothing
                Return LastId

Mit problem er at få fat i det "LastID" i mit BLL. Det har jeg gjort på følgende måde:

                Dim id As Integer
                Dim objData As New Afvigelse()
                Dim objDal As IAfvigelse = New AfvigelserDB
                objData.Overskrift = tav.overskrift
                id = objDal.CreateAfvigelse(objData)
                Return id

Og mit codebehind får et id, men oprette også to records:

  Dim am As New AfvigelseManager
        Dim id As Integer
        If am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text)) Then
            id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text))
            status.Text = "Money transferred" & id
        Else
            status.Text = "Money not transferred"
        End If

Hvad gør jeg??
Avatar billede arne_v Ekspert
16. maj 2006 - 02:45 #29
mangler der et test på om det er post bacl eller ej ?
Avatar billede Slettet bruger
16. maj 2006 - 08:36 #30
Det er muligt, men jeg kan ikke se hvor det er smart at putte ind?
Avatar billede arne_v Ekspert
17. maj 2006 - 02:14 #31
hvor ligger de linier i codebehind henne ?

i hvilken metode ?
Avatar billede Slettet bruger
17. maj 2006 - 09:24 #32
Her er hele codbehind-filen:

Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports BLL
Imports BLL.Afvigelser

Partial Class Afvigelser_opret
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim am As New AfvigelseManager
        Dim id As Integer
        If id = Nothing Then
            id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text))
            status.Text = "Money transferred" & id
        Else
            status.Text = "Money not transferred"
            'End If
        End If
    End Sub
End Class
Avatar billede arne_v Ekspert
18. maj 2006 - 02:25 #33
det ser OK ud

men jeg faldt lige over:

  Dim am As New AfvigelseManager
        Dim id As Integer
        If am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text)) Then
            id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text)) ' <---- skal den linie ikke væk fordi den kaldes ovenfor ?
            status.Text = "Money transferred" & id
        Else
            status.Text = "Money not transferred"
        End If
Avatar billede Slettet bruger
18. maj 2006 - 20:53 #34
Hej Arne_V

Jo, det mener jeg du har ret i, og det er lidt den samme fejl jeg lavede i BLL, og da jeg havde den to steder, ente jeg med 4 records :-)

Det jeg ikke kan få til, er at hvis jeg kun skal have:

If am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text)) Then

hvor ska jeg så få ideet fra, for hvis jeg:

If id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text)) Then

sker der jo ikke noget, da id endnu ikke har en værdi? Hvordan laves det smartes, så jeg modtager et id, samtidig med at jeg kontrollere at det rent faktisk sker?

På forhånd tak.
Avatar billede arne_v Ekspert
18. maj 2006 - 20:57 #35
hvad returnerers der ved fejl

id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text))
If id <> Nothing Then

eller

id = am.CreateAfvigelse(New AfvigelseTransferData(overskrift_txt.Text))
If id <> -1 Then

var et par muligheder
Avatar billede Slettet bruger
20. maj 2006 - 13:32 #36
tak
Avatar billede Slettet bruger
21. juni 2006 - 01:43 #37
Hej igen

Jeg slås med et problem, jeg tror jeg har lidt problemer med at få rækkefølgen af page_load, sub rutiner mv til at fungere rigtigt. Der er ikke nogen der reagere på mit spm. Kunne det være at du havde mulighed for at gennemskue hvad jeg gør galt. På forhånd tak. Se: http://www.eksperten.dk/spm/716672
Avatar billede arne_v Ekspert
21. juni 2006 - 02:34 #38
Jeg har set det, men sådan noget her jeg ikke forstand på. Du skal satse på
en af de andre.
Avatar billede Slettet bruger
21. juni 2006 - 07:41 #39
Ok. Tak.
Avatar billede Slettet bruger
22. juni 2006 - 14:51 #40
Hvad med den her: http://www.eksperten.dk/spm/716979
På forhånd tak.
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