Avatar billede rbl Praktikant
26. august 2002 - 18:27 Der er 53 kommentarer og
3 løsninger

Recordset i database

Jeg er vant til asp, hvor man trækker data ud af et recordset sådan (i vb):

do while not rs.EOF
response.write rs("navn")
rs.MoveNext
loop

Nu skal jeg så lave det samme i asp.net. Jeg har fundet ud af at sætte ".value" efter rs("navn"), men den vil hverken kendes ved rs.EOF eller rs.MoveNext

Hvad skal man bruge i stedet for rs.EOF og rs.MoveNext ?
Avatar billede jakobandersen Nybegynder
26. august 2002 - 18:34 #1
I .NET vil du ikke udskrive dine data i en løkke, du vil istedet binde dit "recordset" (som i .NET hedder en datareader) til en control som kan vise dine data.

Det kunne f.eks. se ud som på siden her:
http://www.dotnetgenius.com/articlebody.aspx?ArticleCode=20
Avatar billede jakobandersen Nybegynder
26. august 2002 - 18:39 #2
Her er et hurtigt utestet eksempel(til access):

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<title>Binding a DataReader to a Repeater Control</title>
<link rel="stylesheet" href="/aspxtreme/shared/netdemos.css">

<script language="C#" runat="server">
  void Page_Load (Object src, EventArgs e) {
      OleDbConnection objConn = new OleDbConnection("DIN CONNECTIONSTRING HER");

      OleDbCommand objCmd= new OleDbCommand("SELECT navn FROM <tabel>", objConn );

      objConn.Open();
      OleDbDataReader objReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection);

      ctrlRepeater.DataSource = objReader;
      ctrlRepeater.DataBind();
  }
</script>
<body>
<asp:repeater id="ctrlRepeater" runat="server">
  <itemtemplate>
    <%# DataBinder.Eval (Container.DataItem, "navn") %>'>
    </itemtemplate>
</asp:repeater>
</body>
</html>
Avatar billede kichian Nybegynder
26. august 2002 - 18:42 #3
Der er muligt at bruge en datareader som beskrevet. Fx:

while (minReader.NextResult()) {
  // Gør noget
}
Avatar billede jakobandersen Nybegynder
26. august 2002 - 18:45 #4
kichian> Det er muligt men hvis man udskriver direkte på denne måde går ideen lidt af at adskille kode fra visning.

Hvis man endelig skal bruge at løbe igennem en reader så er det mere effektivt at bruge en stringbuilder for til sidst at spytte resultatet ud altså:

StringBuilder strTemp = new StringBuilder();
while( minReader.Read()){
  strTemp.Append( minReader.GetString(0) + "<br>");
}
Avatar billede rbl Praktikant
26. august 2002 - 19:28 #5
Hmm..  Jo mere jeg arbejder med asp.net jo mindre forstår jeg hvorfor det er udviklet. Almindelig asp er jo 10 gange nemmere.

Nå, men alligevel, hvordan vil det så se ud, hvis det er VB script i stedet ?  Ser "body"-delen ud på samme måde ?

Det her er hvad jeg har nu (og det virker):
----------------------------------------
dim dbConnn
dim rsTest
set dbconn = createobject("ADODB.Connection")
set rsTest = createobject("ADODB.Recordset")

dbConn.open "DSN=MySQL-con2","user1","12345678"

rsTest = dbconn.execute("select * from vine")
response.write rsTest("navn").value
response.write rsTest("adresse").value
response.write rsTest("tlf").value
dbconn.close
set dbconn = nothing
----------------------------------------

Hvad skal der mere til/ændres for at få det ind i en tabel ?

PS
Jeg troede kun, at det var et lille hurtigt svar, jeg skulle have, så jeg har sat pointene op til 60.
Avatar billede rbl Praktikant
26. august 2002 - 21:28 #6
kom nu... Nu sætter jeg den op til 100 point
Avatar billede orca Nybegynder
26. august 2002 - 21:52 #7
rbl -> Den stump kode du har der kan næppe virke hvis den har endelsen .aspx... Alene ordet "set" burde få den til at brokke sig.

Mvh Mark
--
www.improve.dk
Avatar billede rbl Praktikant
26. august 2002 - 22:22 #8
Du har ret... jeg glemte at sætte "x" bag ved asp. Men koden jeg bruger, har jeg fundet på www.123aspx.com, så det er da underligt, at det ikke er aspx kode.

Hvordan skal man så gøre det ?
Avatar billede odegaard Nybegynder
26. august 2002 - 22:30 #9
Moonducks eksempel ser nu ret tilforladeligt ud. Det er sådan man skal gøre det :-)
Avatar billede rbl Praktikant
26. august 2002 - 22:43 #10
Jo, men jeg bruger VB script - ikke C#
Avatar billede odegaard Nybegynder
26. august 2002 - 22:56 #11
Der er nu ikke meget forskel. Jeg stjæler lige moonducks kode (giv ham pointene):
----------------------
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<title>Binding a DataReader to a Repeater Control</title>
<link rel="stylesheet" href="/aspxtreme/shared/netdemos.css">

<script language="VB" runat="server">
  Sub Page_Load (Object src, EventArgs e)
      Dim objConn As OleDbConnection  = new OleDbConnection("DIN CONNECTIONSTRING HER")

      Dim objCmd As OleDbCommand = new OleDbCommand("SELECT navn FROM <tabel>", objConn )

      objConn.Open()
      OleDbDataReader objReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

      ctrlRepeater.DataSource = objReader
      ctrlRepeater.DataBind()
  End Sub
</script>
<body>
<asp:repeater id="ctrlRepeater" runat="server">
  <itemtemplate>
    <%# DataBinder.Eval (Container.DataItem, "navn") %>'>
    </itemtemplate>
</asp:repeater>
</body>
</html>
Avatar billede rbl Praktikant
26. august 2002 - 23:17 #12
og hvad skal jeg så bruge som connection string ?  Før brugte jeg jo:

dbConn.open "DSN=MySQL-con2","user1","12345678"

til at conncte til min MySQL database. Hvad skal jeg skrive nu ?

Du må nu gerne få nogle af pointene. Der var kun 30 point på højkant, da moonduck svarede
Avatar billede orca Nybegynder
26. august 2002 - 23:47 #13
Brug den samme connection string som før.
Avatar billede jakobandersen Nybegynder
27. august 2002 - 00:01 #14
Hvis du bruger MySQL er det lidt tricky så skal du have installeret et Odbc namespace.
Avatar billede odegaard Nybegynder
27. august 2002 - 00:09 #15
Findes der ikke en OleDB driver til MySQL ?
Avatar billede rbl Praktikant
27. august 2002 - 00:11 #16
Jeg har installeret MyODBC, og jeg fik det til at virke med almindelig asp

Jeg har copy-pastet det odegaard skrev, og erstattet connection string og sql-udtryk, men der sker ikke så meget
Avatar billede rbl Praktikant
27. august 2002 - 00:15 #17
Den melder ingen fejl, men den viser heller ikke noget.
Avatar billede odegaard Nybegynder
27. august 2002 - 00:28 #18
Følgende linie:
OleDbDataReader objReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)

Skal forresten lige ændres til:
Dim objReader As OleDbDataReader = myCommand.ExecuteReader(CommandBehavior.CloseConnection)
Avatar billede rbl Praktikant
27. august 2002 - 00:34 #19
Stadig intet.

Jeg bliver lige pludselig i tvivl, hvad der skal til for at køre asp.net. Jeg har installeret IIS + .NET framework + ServicePack 2. Skulle det ikke være nok ?
Avatar billede odegaard Nybegynder
27. august 2002 - 00:39 #20
Det lyder fint nok. Kan du slet ikke eksekvere selv de mest basale aspx-sider ?
Avatar billede rbl Praktikant
27. august 2002 - 00:47 #21
Nu er det første gang jeg roder med aspx, men skulle det her ikke virke:

<%
response.write("hello")
%>
Avatar billede odegaard Nybegynder
27. august 2002 - 00:51 #22
Jo, den skulle være OK.
Geninstallér .NET. Det plejer faktisk altid at hjælpe.
Avatar billede rbl Praktikant
27. august 2002 - 01:11 #23
damn it. Jeg er vist kommet til at installere det forkerte .net framework. Jeg downloadede jo bar den første, jeg så. Nu er jeg ved at downloade SDK-versionen :-)
Avatar billede odegaard Nybegynder
27. august 2002 - 01:20 #24
Det har ikke noget at sige. Det almindelige framework er godt nok hvis du ikke skal til at compile DLL'er osv.
Avatar billede rbl Praktikant
27. august 2002 - 01:25 #25
hmm.. er der eller noget jeg skal gøre anderledes end ved asp-dokumenter ?

Nå, jeg er ved at være træt. Jeg går videre i morgen. Det må da kunne komme til at virke på et tidspunkt.
Avatar billede odegaard Nybegynder
27. august 2002 - 01:30 #26
Tro mig! Det er ufatteligt så mange der har løst deres problemer ved at geninstallere .NET frameworket. Der er virkelig noget fuckup med Microsnots installer.
Avatar billede rbl Praktikant
27. august 2002 - 11:10 #27
Nu har jeg installeret frameworket igen, men det virker stadig ikke. I starten brugte jeg notepad, men jeg har også prøvet i Web Matrix. Det er virkelig frustrerende.
Avatar billede odegaard Nybegynder
27. august 2002 - 11:54 #28
Virker det heller ikke med WebMatrix' egen webserver ?
Avatar billede rbl Praktikant
27. august 2002 - 12:35 #29
hvordan bruger jeg den ?
Avatar billede odegaard Nybegynder
27. august 2002 - 13:42 #30
www.asp.net er der en tutorial til WebMatrix og ASP.NET. Jeg kan virkelig godt anbefale at du går den igennem slavisk. Så lærer du alle disse ting temmelig hurtigt, og utallige lys går op for dig.
Det tager næppe mere end en times tid.
Avatar billede rbl Praktikant
02. september 2002 - 14:50 #31
Hej igen, undskyld det har taget så lang tid, men jeg blev nødt til at formattere og geninstallere alt for at få asp.net til at virke. Nu virker asp.net på min server, men der kommer en fejlmeddelse, når jeg kører ovenstående kode:

Compiler Error Message: BC30183: Keyword is not valid as an identifier. (linie 8)
  Line 6: 
  Line 7:  <script language="VB" runat="server">
->Line 8:    Sub Page_Load (Object src, EventArgs e)
  Line 9:        Dim objConn As OleDbConnection  = new OleDbConnection("DSN=MySQL-con2","user1","12345678")
  Line 10:
Avatar billede orca Nybegynder
02. september 2002 - 21:16 #32
Sub Page_Load (Object src, EventArgs e)

=

Sub Page_Load()
Avatar billede rbl Praktikant
02. september 2002 - 22:20 #33
ok, tak. Nu kommer der så en fejlmeddelelse i linie 9 (se linie 9 ovenfor):

Compiler Error Message: BC30516: Overload resolution failed because no accessible 'New' accepts this number of arguments
Avatar billede rbl Praktikant
02. september 2002 - 23:02 #34
Jeg har selv rettet fejlen ved at bruge en anden init-string. Men der kommer en fejl mere længere nede (linie 14):

Compiler Error Message: BC30469: Reference to a non-shared member requires an object reference.

Line 12:
Line 13:      objConn.Open()
Line 14:      Dim objReader As OleDbDataReader = oledbCommand.ExecuteReader(CommandBehavior.CloseConnection)
Line 15:
Line 16:      ctrlRepeater.DataSource = objReader
Avatar billede rbl Praktikant
03. september 2002 - 00:29 #35
Kom nu,hjælp mig :-)  Jeg ved godt, at det har været lang tid undervejs, men jeg vil altså have det til at virke.

Det compileren brokker sig over er (i linie 14) ordet "oledbCommand". Jeg fik obrindeligt at vide, at der skulle stå "MyCommand", men det ord kendte den slet ikke.
Avatar billede reffak Nybegynder
03. september 2002 - 01:33 #36
oledbcommand er jo en class. Det er ikke et instantieret objekt, og kan derfor slet ikke bruges som du forsøger at bruge det! MyCommand har derimod højst sandsynligvis været et instantieret object af typen oledbcommand.

Hvis det her er sort snak for dig, så skal du kigge lidt på noget grundlæggende objekt-orienteret programmering - du kommer simpelthen ikke uden om det; det er hele forskellen mellem asp og asp.net
Ellers kig i sdk dokumentationen. Plukket direkte derfra - et eksempel på anvendelse af en OldDbCommand:

Public Sub ReadMyData(myConnString As String)
    Dim mySelectQuery As String = "SELECT OrderID, CustomerID FROM Orders"
    Dim myConnection As New OleDbConnection(myConnString)
    Dim myCommand As New OleDbCommand(mySelectQuery, myConnection)
    myConnection.Open()
    Dim myReader As OleDbDataReader = myCommand.ExecuteReader()
    Try
        While myReader.Read()
            Console.WriteLine(myReader.GetInt32(0).ToString() + ", " _
              + myReader.GetString(1))
        End While
    Finally
        ' always call Close when done reading.
        myReader.Close()
        ' always call Close when done reading.
        myConnection.Close()
    End Try
End Sub


MVH
Avatar billede rbl Praktikant
03. september 2002 - 02:29 #37
tja, der kommer godt nok ikke nogen fejlmeddelelse, men der kommer heller ikke noget data ud. Kan du ikke lige prøve at forklare mig, hvordan jeg bruger det du viser ?
Avatar billede rbl Praktikant
03. september 2002 - 02:34 #38
Jeg har prøvet at sammenskrive de to løsninger til noget, der for mig at se skulle virke, men det gør det bare ikke :-(

<%@ Page Language="VB" Debug="True" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>

<script runat="server">

  Public Sub ReadMyData()
    Dim mySelectQuery As String = "select * from vin"
    Dim myConnection As New OleDbConnection("DRIVER={MySQL};Server=localhost;Database=ParkWine;UID=user1;Pwd=12345678;")
    Dim myCommand As New OleDbCommand(mySelectQuery, myConnection)
    myConnection.Open()
    Dim myReader As OleDbDataReader = myCommand.ExecuteReader()
      ctrlRepeater.DataSource = myReader
      ctrlRepeater.DataBind()
  End Sub
</script>

<body>
<asp:repeater id="ctrlRepeater" runat="server">
  <itemtemplate>
    <%# DataBinder.Eval (Container.DataItem, "navn") %>
    </itemtemplate>
</asp:repeater>
</body>
</html>

Hvad kan der være galt ?  Der kommer ingen fejlmeddelselser, men der bliver heller ikke skrevet noget ud
Avatar billede orca Nybegynder
03. september 2002 - 07:56 #39
Jeg ved godt det er et tåbeligt spørgsmål... Men nogen skal jo stille det :)... Er der noget indhold i "vin" tabellen?

Mvh Mark
--
www.improve.dk
Avatar billede rbl Praktikant
03. september 2002 - 08:15 #40
ja. Jeg har lavet koden i almindelig asp, og det virker fint:

<html>
<title>asp test</title>
<head>
</head>
<body>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={MySQL};Server=localhost;Database=ParkWine;UID=user1;Pwd=12345678;"
Set rstest = Conn.Execute("SELECT * FROM vin")
%>
<table border=1>
<tr>
<td>Navn</td> <td>Land</td> <td>Område</td> <td>Pris</td>
</tr>
<%
do while not rstest.eof
response.write "<tr> <td>" + rsTest("navn") + "</td>"
response.write "<td>" + rsTest("land") + "</td>"
response.write "<td>" + rsTest("omraade") + "</td>"
response.write "<td>" + rsTest("pris") + "</td> </tr>"
rstest.movenext
loop
%>
</table>
<%
conn.close
set conn = nothing
%>
</body>
</html>

Der er 4 rækker i tabellen, og de bliver alle skrevet ud
Avatar billede reffak Nybegynder
03. september 2002 - 08:45 #41
hej
Hvor kalder du din sub fra? (i det sidste stykke kode, det sammensatte forslag - som ellers ser umiddelbart godt ud)
MVH
Avatar billede rbl Praktikant
03. september 2002 - 09:28 #42
Du siger noget :-). Nu har jeg sat <% ReadMyData() %> lige efter <body>.

Den klager over, at der ikke er nogen database provider, så jeg har ændret connection string til:

"provider=myoledb;Server=localhost;Database=ParkWine;UID=user1;Pwd=12345678;"

Men den vil ikke genkende MyoleDB, selv jeg lige har installeret det.
Avatar billede rbl Praktikant
03. september 2002 - 09:51 #43
ok, nu har jeg skiftet MyOLEDB ud med MySQLProv. Nu kommer den fejlmeddelese ikke mere. Til gængæld virker det somom, at den går i uendelig løkke. Der bliver bare ved med at stå "Opening page http..."
Avatar billede reffak Nybegynder
03. september 2002 - 12:33 #44
prøv nu at lytte til fornuft, og gå tilbage til basics. Læs dokumentationen i sdk, kig på nogle eksempler - der er masser af kodeeksempler med databasekommunikation, der kan køres blot man klikker på dem. Du kommer ingen vejne med det her gætværk.

Denne tråd er 44 poster lang, med denne post. Jeg står af nu.
Avatar billede rbl Praktikant
04. september 2002 - 01:12 #45
Det er da klart, at jeg må gætte mig frem. Der er jo ikke nogen, der kan fortælle mig, hvordan det skal gøres.

Du har ret i, at der findes masser af eksempler på datakommunikation, men de eksempler er ofte rettet mod MSSQL eller Access. Det giver ikke noget godt resultat at bruge de metoder på min MySQL.
Avatar billede rbl Praktikant
04. september 2002 - 01:21 #46
Jeg har brug udelukkelsesmetoden, og fundet ud af, at det er linien:
myConnection.Open(), der får det til at gå i stå.
Avatar billede orca Nybegynder
04. september 2002 - 07:49 #47
Du har tydeligvis et problem med din database eller connection string. Koden bør virke 100% ligemeget om det er Access, Oracle, MSSQL Server eller MySQL, den eneste forskel i denne simple kode bør være Connection string'en. Tjek at din db kører, og at du skriver de korrekte kodeord, samt at du har tilladelse til at tilgå db'en.
Avatar billede rbl Praktikant
04. september 2002 - 08:37 #48
Tja, databasen virker fint sammen med almindelig asp. Jeg Kiggede så i MyOLEDB dokumentationen og fandt følgende definition på connection string:

Provider: MySQLProv
Data Source: SERVER=server_name;DB=database_name;UID=user_name;PWD=password;PORT=port_number

Det skriver jeg sådan her:
"provider=MySQLProv;Server=localhost;DB=ParkWine;UID=user1;Pwd=12345678;port=3306"

Jeg har prøvet både med og uden portnummer. Jeg ved godt, at det ikke er præcis ligesom definitionen (difinitionen er delt op i provider og datasource), men man kan da ikke dele connection string op i 2, eller kan man ?
Avatar billede orca Nybegynder
04. september 2002 - 09:26 #49
Prøv at gå ud på nettet og find et allerede lavet eksempel, jeg gider ligesom reffak ikke lege med på gætværk mere, eller leg lidt med quick start tutorials'ne.

/Mark
Avatar billede odegaard Nybegynder
04. september 2002 - 09:58 #50
http://www.123aspx.com/redir.aspx?res=28615
Eksemplet er i C#, men det kan du lige så godt begynde at vende dig til at halvdelen af eksemplerne er. Methods og properties er præcis de samme, så det er kun lidt syntax der er forskellig (semikolon til sidst, { } istedet for End, og erklæring af variabler er de eneste større forskelle som man nemt kan abstrahere fra).
Avatar billede rbl Praktikant
04. september 2002 - 10:31 #51
Jeg har lige prøvet at connecte, som de gør i det eksempel, men der sker det samme igen. Der bliver bare ved med at stå "Åbner siden http://....." i status baren. Der sker ikke mere. Ikke engang en fejlmeddelelse.
Avatar billede odegaard Nybegynder
04. september 2002 - 10:42 #52
Så ligger fejlen jo nok i din kode! Det burde vel egentlig også være det meste sandsynlige, når man tænker på hvor uendelig lang den her side er.
Istedet for at gøre lidt ligesom de gør, så gør præcis som de gør (tag AL deres kode og ret table-navn og SQL-query til).
Avatar billede rbl Praktikant
04. september 2002 - 14:19 #53
Det er jo det jeg har gjort hele tiden. For hver gang der er en, der er kommet med et forslag, har jeg lavet et nyt .aspx dokument og copy-pased det ind. Jeg tror at fejlen ligger i min connection string, da det er det eneste, jeg selv har strikket sammen (foruden tabellen og sql-statement).
Avatar billede duffe1 Nybegynder
05. september 2002 - 22:54 #54
Hej

Prøv som du siger at copy-paste det her ind i en ny aspx fil og så ændre database, bruger og pass i conn string og ændre table_navn til det din tabel hedder.

<%@ Page Language="VB" Debug="True" CompilerOptions='/R:"C:\Program Files\Microsoft.NET\Odbc.Net\Microsoft.Data.Odbc.dll"' %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="Microsoft.Data.ODBC" %>
<html>
<head>
<script runat="server">

  'DATABASE CONNECTION
  Dim strConn As String = "driver=MySQL;Server=localhost;DB=DB_Navn;UID=user;Pwd=pass;"
  Dim objConn As New ODBCConnection(strConn)

  Public Sub Page_Load (obj As Object, e As EventArgs)

    'DISPLAY RECORDS IN DATAGRID WHEN PAGE FIRST LOADS
    If Not Page.IsPostBack Then
      Dim objCmd As New ODBCCommand     
      Dim objDA As New ODBCDataAdapter
      Dim dvw As DataView
      Dim ds As New DataSet
      dim strSQL = "SELECT * FROM table_navn"
      objDA = New ODBCDataAdapter(strSQL, objConn)
      objDA.Fill(ds, "table_navn")
      dvw = ds.Tables("table_navn").DefaultView
      ctrlRepeater.DataSource = dvw
      ctrlrepeater.DataBind()
    End If
  End Sub

</script>

</head>
<body>

<asp:repeater id="ctrlRepeater" runat="server">
  <itemtemplate>
    <%# DataBinder.Eval (Container.DataItem, "navn") %>
  </itemtemplate>
</asp:repeater>

</body>
</html>

Det skulle meget gerne virke
Avatar billede rbl Praktikant
05. september 2002 - 23:07 #55
Det virker sku !!!! Mange tak
Avatar billede rbl Praktikant
05. september 2002 - 23:42 #56
Tak for hjælpen alle sammen
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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