Avatar billede rbl Praktikant
17. september 2002 - 23:17 Der er 10 kommentarer og
1 løsning

udtræk af database

Jeg har en MySQL database som jeg laver et udtræk fra. Jeg starter med at lave en tabel med denne kode:

  'DATABASE CONNECTION
  Dim objConn as ODBCConnection
  Dim strConn As String = "conn-str"
  objConn = New ODBCConnection(strConn)

  Dim objDA As New ODBCDataAdapter
  Dim dvw As DataView
  Dim ds As New DataSet
  objDA = New ODBCDataAdapter("select bla bla", objConn)
  objDA.Fill(ds, "selecter")
  dvw = ds.Tables("selecter").DefaultView
  ctrlRepeater.DataSource = dvw
  ctrlrepeater.DataBind()

Og så selvfølgelig en repeater til at lave tabellen med.

Jeg har lavet det sådan, at man kan trykke på et link i hver række, så man kommer ind på en side, hvor der skal vises nogle flere attributter. (noget lignende på edbpriser.dk, når man har en liste over produkter og trykker på "top ti").

Med til denne side er der en unik attribut (nøgle), så jeg er sikker på, at når jeg laver en select på den, kommer der kun én række retur. Når der kun er én række, synes jeg det virker dumt at lave en repeater for at skrive den ud på skærmen. Desuden skal jeg også bruge attributten i et script, f.eks:

dim NavnSTR as String
NavnSTR = (attributten "navn" i databasen)

hvordan trækker jeg bedst disse attributter ud, så jeg kan bruge dem i et script ?
Avatar billede z42cool Nybegynder
18. september 2002 - 10:02 #1
Dim objConn as ODBCConnection
Dim strConn As String = "conn-str"
objConn = New ODBCConnection(strConn)

Dim objCmd as ODBCCommand
objCmd = New ODBCCommand("SELECT Navn FROM MyTable WHERE Id=" + unik_nøgle)
Dim NavnSTR as String
NavnSTR = CType(objCmd.ExecuteScalar(), String)
Avatar billede z42cool Nybegynder
18. september 2002 - 10:04 #2
Ups.... Connection objektet skal self. åbnes først!

Dim objConn as ODBCConnection
Dim strConn As String = "conn-str"
objConn = New ODBCConnection(strConn)

Dim objCmd as ODBCCommand
objConn.Open
objCmd = New ODBCCommand("SELECT Navn FROM MyTable WHERE Id=" + unik_nøgle, objConn)
Dim NavnSTR as String
NavnSTR = CType(objCmd.ExecuteScalar(), String)
objConn.Close
Avatar billede z42cool Nybegynder
18. september 2002 - 10:05 #3
og unik_nøgle er naturligvis den værdi du modtager fra din listnings side!
Avatar billede rbl Praktikant
18. september 2002 - 10:19 #4
hvordan ved jeg at det er tublen "navn" der kommer ud og ikke f.eks. tublen "adresse" ?  ved linien:
NavnSTR = CType(objCmd.ExecuteScalar(), String)
Avatar billede rbl Praktikant
18. september 2002 - 10:33 #5
hov, jeg så ikke lige, at du kun havde skrevet "Select navn from table..."  - Jeg skal bruge "Select * from table..." Hvordan trækker jeg de enkelte attributter ud ?
Avatar billede z42cool Nybegynder
18. september 2002 - 16:06 #6
Så skal du i stedet bruge en datareader:

Dim objConn as ODBCConnection
Dim strConn As String = "conn-str"
objConn = New ODBCConnection(strConn)

Dim objCmd as ODBCCommand
objConn.Open
objCmd = New ODBCCommand("SELECT * FROM MyTable WHERE Id=" + unik_nøgle, objConn)
Dim objReader as ODBCDataReader
objReader = objCmd.ExecuteReader()

Dim NavnSTR as String
NavnSTR = objReader.GetString(0)
objConn.Close

Readeren har så tilsvarende metoder for de andre datatyper, hvis felt 2 f.eks. er et heltal så kan du sige:

Dim i as integer
i = objReader.GetInt32(1)    'Husk at collections er 0 indekserede, så felt 2 har indeks 1
Avatar billede rbl Praktikant
18. september 2002 - 22:16 #7
hmm, den bliver ved med at lave samme fejl hele tiden:

System.InvalidOperationException: No data exists for the row/column.

Fejlmeddelelsen kunne tyde på, at select-dimsen ikke returnerer noget som helst, men jeg har prøvet at lave et response.write() på select-strengen, og den ser ok ud:

SELECT * FROM andre WHERE varenr=1  Og ja, der findes en instans med varenr=1.

Forresten hvad med typen double ?  Er det bare: objReader.GetDouble(0) ?
Avatar billede z42cool Nybegynder
19. september 2002 - 08:32 #8
Jeg går ud fra at du anvender MySQL som DB da du ellers ville anvende Sql klasser eller OleDb klasser, så her er en glimrende artikel om MySQL DB tilgang fra .Net:

http://www.mysql.com/articles/dotnet/

I øvrigt vil en tom streng give en sql_no_data exception og det er sikkert det du oplever. Der er en patch her: http://support.microsoft.com/default.aspx?scid=kb;EN-US;q319243.

Og ja... Den hedder GetDouble, men med ODBC.Net følger en glimrende dokumentation, hvis du har lavet en std. install er den sikkert i c:\programmer\microsoft.net\odbc.net ellers kan du hente hele pakken her:
http://www.microsoft.com/downloads/release.asp?ReleaseID=35715
Avatar billede rbl Praktikant
19. september 2002 - 11:38 #9
Det er ikke en tom streng, desuden får jeg samme fejl ved alle felter - lige meget om det er string eller integer.
Avatar billede rbl Praktikant
19. september 2002 - 23:20 #10
Nu har jeg læst en h... masse, og endelig fundet ud af, hvad der var galt. Jeg manglede bare linien:

objReader.Read()

Nå, men tak for hjælpen, du får alle pointene alligevel, da jeg sikkert ikke havde fundet ud af det, hvis du ikke havde guidet mig ind på det rette spor :-)
Avatar billede z42cool Nybegynder
20. september 2002 - 07:42 #11
He-he.... Det må du sku' undskylde jeg glemte :-) Nogle gange overser man bare ting..... Men tak for point :-)
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