26. august 2002 - 18:27Der 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 ?
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.
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.
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.
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 )
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 ?
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 :-)
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.
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.
På 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.
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:
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
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.
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
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 ?
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>
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..."
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.
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.
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.
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 ?
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.
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).
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.
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).
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).
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.
'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
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.