[ASP.NET]Databeesjes en Recordsets

Pagina: 1
Acties:

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 20:40

BlackBurn

One Ring To Rule Them All

Topicstarter
Ik ben nu een tijdje aan het spelen met ASP.NET, alleen nu zit ik met het probleem, dat het me maar niet wil lukken om enige helderheid te zien in hoe ASP.NET en ADO.NET nu omgaan met die database.

In classic ASP kon je gewoon een connectie maken, recordset aanroepen en vanuit de recordset kon je direct de velden aanvragen.
code:
1
rs("username")

Maar hoe werkt dit in ASP.NET, ik heb al behoorlijk wat naar informatie zitten zoeken o.a. op msdn en 4guysfromrolla, maar nergens kan ik een heldere en duidelijke uitleg vinden over hoe ASP.NET nu werkt met databasen. Ik kan wel elke keer dom code overtypen enzo, maar het zou wel fijn zijn als ik het ook zou snappen wat ik deed.

Dus mijn vraag is eigenlijk, kan iemand hier niet even kort en duidelijk uitleggen wat er nu precies veranderd is en hoe het nu werkt?

Ik heb mezelf aangeleerd om de code in de daarvoor bestemde file te zetten *.vb dus. (werk dus met vb.net). Nu ben ik er al wel achter gekomen hoe ik een connectie kan maken.
code:
1
2
3
4
5
6
Dim Cn As System.Data.OleDb.OleDbConnection
Cn = New System.Data.OleDb.OleDbConnection _
("provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:/inetpub/wwwroot/BVL/data/gebruikers.mdb;")
Cn.Open()
'Hier moet dus een recordset komen.
Cn.Close()

Op MSDN vond ik wel een pagina die uitlegde hoe ik een recordset kon maken, maar daar kwam ik niet veel verder mee, want dingen zoals.
Me.Label= rs("username") werkte niet.

If it is broken, fix it. If it ain't broken, make it better!


Verwijderd

Heb je in de .NET API docs (zit bij de SDK) al bij ADO.NET gekeken, zit naar mijn idee toch duidelijke uitleg bij.

  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 20:40

BlackBurn

One Ring To Rule Them All

Topicstarter
Daar staat idd al een iets duidelijker uitleg, de duidelijkste die ik tot nu toe heb gevonden, dus als ik het goed begrijp, is de DataAdapter, het object wat nu zorgt voor de doorgave van gegevens aan de DataSet en de DataSet komt i.p.v. de Recordset.

Nu weet ik alleen nog niet hoe ik de juiste data uit de Dataset kan halen.

If it is broken, fix it. If it ain't broken, make it better!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:55

gorgi_19

Kruimeltjes zijn weer op :9

Je kan ook hier eens kijken voor een uitgewerkter voorbeeld met documentatie er tussendoor:

http://www.asp101.com/samples/database_aspx.asp

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Recordsets bestaan niet meer in .NET voor zover ik weet.

Wat je wel hebt, zijn DataReaders, DataAdapters en DataSets. Misschien dat je meer informatie vind als je op deze keywords zoekt?

Vind je niets terug in de .NET SDK Documentation ?

Even C# voorbeeldje:

code:
1
2
3
4
5
6
7
8
OleDbConnection conn = new OleDbConnection ();
conn.ConnectionString = "blaat";
conn.Open();

OleDbCommand qryGetSomething = new OleDbCommand ();
qryGetSomething.Connection = conn;
qryGetSomething.CommandText = "SELECT blaat FROM bla";
....


Disclaimer: dit is uit de losse pols, dus er kunnen syntaxfouten, verkeerde property-namen, etc... inzitten.

https://fgheysels.github.io/


  • BlackBurn
  • Registratie: Juni 2001
  • Laatst online: 20:40

BlackBurn

One Ring To Rule Them All

Topicstarter
Visual Basic:
1
2
3
4
5
6
7
8
Dim Cn As System.Data.OleDb.OleDbConnection
Dim Da As System.Data.OleDb.OleDbDataAdapter
Dim Ds As System.Data.DataSet

Cn = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:/inetpub/wwwroot/BVL/data/gebruikers.mdb;")
Da = New OleDbDataAdapter("SELECT * FROM TblInlog", Cn)
Ds = New DataSet()
Da.Fill(Ds)


Heb ik nu, maar hoe kan ik nu iets aan de label hangen, ik kan moeilijk response.write doen, want ik werk in de aparte pagina, dus moet het iets worden van. Me.LblTest().Text= .....

If it is broken, fix it. If it ain't broken, make it better!


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:55

gorgi_19

Kruimeltjes zijn weer op :9

Ik zal zo even een stukje van mijn code posten. Het is weliswaar de SQLData, maar OLEdata werkt niet veel anders... :)

adminDB.vb
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Imports System.Data
Imports System.Data.SqlClient

Namespace ProSim

    ' Een aparte class met alle methods die van en naar de DB schrijven.
    Public Class AdminDB

        Public Function GetSpelVariabelen(ByVal LandId As Integer, ByVal Periode As Integer) As SqlDataReader
            ' Creeer een object van de connectie en de opdracht
            Dim myConnection As New SqlConnection(ConfigurationSettings.AppSettings("connectionString"))
            Dim myCommand As New SqlCommand("prosim_GetSpelVariabelen", myConnection)

            ' Geef Command aan als een SPROC
            myCommand.CommandType = CommandType.StoredProcedure

            ' Voeg parameters aan SPROC
            Dim parameterLandID As New SqlParameter("@LandID", SqlDbType.Int, 4)
            parameterLandID.Value = LandId
            myCommand.Parameters.Add(parameterLandID)

            Dim parameterPeriode As New SqlParameter("@Periode", SqlDbType.Int, 4)
            parameterPeriode.Value = Periode
            myCommand.Parameters.Add(parameterPeriode)
            myConnection.Open()

            Dim result As SqlDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

' Geef de variabele result als een uitvoer van de functie
            Return result
        End Function

       ....
    End Class
End namespace


De codebehind:
FinanceDecisions.ascx.vb
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Imports System.Data
Imports System.Data.SqlClient

Namespace ProSim

    Public MustInherit Class financeDecision
        ' Normaal heb je een .aspx bestand; dit is een .ascx bestand;
        ' Maakt in dit geval niet uit voor het principe.
        Inherits System.Web.UI.UserControl
        Protected WithEvents btnAddLoan As System.Web.UI.WebControls.LinkButton
        ....
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Alleen als er GEEN postback event is (vgl: submit), dan haal je de variabelen
            ' uit de db op.
            If Page.IsPostBack = False Then
                ' Maak een nieuwe / lokale instance van de class
                Dim _AdminDB as new AdminDB
 
                ' Creeer een lokale variabele result als een datareader en vul
                ' deze met het resultaat van de functie: GetSpelVariabelen
                Dim result As SqlDataReader = _AdminDB.GetSpelVariabelen(2,2)
                ' Lees de datareader
                result.read()
                   ' Koppel een resultaat uit de reader aan de text van de linkbutton
                   btnAddLoan.Text = result("textnaam")
                ' sluit de reader.
                result.close

            End If

        End Sub

        ....

    End Class

End Namespace


FinanceDecisions.ascx
code:
1
2
3
4
5
6
7
8
..
<form runat=server>
<!--
We hebben een linkbutton gemaakt
//-->
<asp:LinkButton id="btnAddLoan " runat="server"></asp:LinkButton>
</form>
...

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Databind is key.

1) Download mn data-access tier generator LLBLGen voor SQLserver /VB.NET/C#: http://www.sd.nl/software . Hiermee genereer je de basic Data access layer functies, zowel classes als stored procedures.
2) Maak een BL layer, die de DAL classes gegenereerd met tool uit 1) aanroepen. Bv, een select van alle rows uit een table. In de BL layer krijg je dan een DataTable terug, en je definieert in de BL class een DataView object, mbv de verkregen DataTable.
3) De DataView geef je terug aan de caller van de functie, de caller bevindt zich in een codebehind page, bv in de Page_Load eventhandler. Je bind dat DataView object aan bv een repeater control of datalist control op je page.

Alle database access zit in een layer, waar je dus met groot gemak gebruik van kunt maken. Dit heet n-tier development, en levert je een hoge mate van abstractie op in hogere lagen van je applicatie, bv de GUI layer in de vorm van asp.net webforms.
Pagina: 1