Avatar billede everclear Praktikant
20. marts 2006 - 12:49 Der er 18 kommentarer og
1 løsning

OleDbDataReader problem

Jeg er gammel asp mand og er kommet igang med at rode med appliktationsudvikling i .NET. Jeg sidder og skal have lavet en forholdsvis simpel opgave (i classic asp ihvertfald). Jeg skal have oprettet forbindelse til en Access database, tjekke om der er en post, der har afsendstatus 2 for så herefter at hive ID'et ud.
F.eks. i asp:

conn = Min connection string
SQL = "select id, afsendstatus from nyhedstabel where id = '2'"
set rs = conn.execute(SQL)

If rs.eof then

SelectSQL = "select * from indhold where id = " & rs("id")
set selectrs = conn.execute(SelectSQL)

'Kode, der udfører en masse ting med indholdet.

End If


Jeg havde forestillet mig, at jeg hev det ud i en OleDbDataReader og herefter kunne benytte mine data som jeg ville, men kan slet ikke få det til at fungere.
Avatar billede arne_v Ekspert
20. marts 2006 - 13:10 #1
eksempel som henter 1 værdi ud:

<%@ import namespace="System.Data.OleDb" %>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
    OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb");
    con.Open();
    OleDbCommand sel = new OleDbCommand("SELECT COUNT(*) FROM t1", con);
    int n = (int)sel.ExecuteScalar();
    con.Close();
    result.Text = n.ToString();
}
</script>
<asp:label id="result" runat="server"/>
Avatar billede arne_v Ekspert
20. marts 2006 - 13:11 #2
andet eksempel:

<%@ Import Namespace="System.Data.OleDb" %>
<table border="1">
<tr>
<th>F1</th>
<th>F2</th>
</tr>
<%
    Dim con As OleDbConnection = New OleDbConnection ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Database\MSAccess\Test.mdb;User Id=admin;Password=")
    con.Open
    Dim sel As OleDbCommand = New OleDbCommand ("SELECT * FROM T1", con)
    Dim rdr As OleDbDataReader = sel.ExecuteReader
    While rdr.Read
%>
    <tr>
    <td><%=rdr(0)%></td>
    <td><%=rdr(1)%></td>
    </tr>
<%
    End While
    rdr.Close
    con.Close
%>
</table>
Avatar billede arne_v Ekspert
20. marts 2006 - 13:12 #3
første er i C#, andet er i VB.NET

der er bedre måder at lave det sidste eksempel på som bruger ASP.NET controller, men
eksemplet er ASP style
Avatar billede everclear Praktikant
20. marts 2006 - 13:19 #4
Det ser jo lækkert ud:-) Er det slet ikke muligt at benytte f.eks. rs("id") ligesom i gamle dage? Er man nødt til at bruge placering i databasen i stedet for record navnet?
Avatar billede everclear Praktikant
20. marts 2006 - 13:25 #5
Jeg får dog også en rimelig irriterende fejl med "No data exist for the row/column" når jeg kører applikationen.

Jeg bruger flg:

If rdr.HasRows = True Then

    lblResultat.Text = rdr(0).ToString()

End If

Nogen bud på hvorfor?
Avatar billede arne_v Ekspert
20. marts 2006 - 13:27 #6
rdr(0) og rdr("id") virker vist begge
Avatar billede arne_v Ekspert
20. marts 2006 - 13:28 #7
det kan jeg ikke lige gennemskue - kan du poste noget mere kode ?
Avatar billede everclear Praktikant
20. marts 2006 - 14:58 #8
Ja selvfølgelig:-) Du får lige hele kodestumpen med et par kommentarer:

Dim conn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=z:\emdb\Newsmail\Newsmail_bu.mdb;")
conn.Open()

Dim sel As OleDbCommand = New OleDbCommand("SELECT * FROM Nyhedsmail", conn)
Dim rdr As OleDbDataReader = sel.ExecuteReader

'Hvis ikke databasen er tom, så udskriv det første ID
  If rdr.HasRows = True Then

      lblResultat.Text = rdr(0).ToString()

  End If
Avatar billede everclear Praktikant
20. marts 2006 - 16:14 #9
Jeg har fået det til at virke nu:-) Kan du evt. hurtigt fortælle mig, hvordan man laver et loop i .NET?
Altså som i classic:

do until rs.eof

'Udskriv et eller andet

rs.movenext
Loop
Avatar billede arne_v Ekspert
20. marts 2006 - 16:19 #10
1)  ASP style

    en while loop som i eksemplet ovenfor

2)  assign din reader til wne web kontrol

3)  brug en repeater hvor du koder loopet med tags
Avatar billede arne_v Ekspert
20. marts 2006 - 16:24 #11
... til en web kontrol
Avatar billede arne_v Ekspert
20. marts 2006 - 16:27 #12
men de 2 sidste skal du nok lige laese lidt omkring
Avatar billede dr_chaos Nybegynder
20. marts 2006 - 17:28 #13
Nu ved jeg ikke om det er det her du gør.
Men hvis du bare skal have den første item ud bruger man
Dim conn As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=z:\emdb\Newsmail\Newsmail_bu.mdb;")
conn.Open()

Dim sel As OleDbCommand = New OleDbCommand("SELECT * FROM Nyhedsmail", conn)
Dim rdr As OleDbDataReader = sel.ExecuteReader

'Hvis ikke databasen er tom, så udskriv det første ID
  If rdr.HasRows = True Then
//læs første linie
rdr.Read();
      lblResultat.Text = rdr(0).ToString()

  End If
Avatar billede dr_chaos Nybegynder
20. marts 2006 - 17:29 #14
hvis du f.eks. har et gridview /datagrid på din aspx side kan du få vist alle værdier med:

DitGridview.Datasource = rdr;
DitGridview.Databind();
Avatar billede dr_chaos Nybegynder
20. marts 2006 - 17:30 #15
autogeneratecolumns skal være sat til true ellers skal du selv lave columns.
Avatar billede dr_chaos Nybegynder
20. marts 2006 - 17:34 #16
En repeater kan se ud på denne simple måde (i asp.net 2.0):
  <asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
    <asp:Label ID="lbl1" runat="server" Text="<%#Eval("id") %>"></asp:Label>
    </ItemTemplate>
    </asp:Repeater>

I f.eks. page_load
Henter du så data og får vist alle id'er med
Repeater1.DataSource = rdr;
Repeater1.DataBind();
Avatar billede everclear Praktikant
21. marts 2006 - 08:14 #17
Fik arne_v's til at virke:-)

Smid lige et svar mester, så er der point.....og tak for hjælpen:-)
Avatar billede dr_chaos Nybegynder
21. marts 2006 - 08:17 #18
np skrev bare for at vise dig hvordan du kan bruge en reader i forbindelse med forskellige kontroller :)
Avatar billede arne_v Ekspert
21. marts 2006 - 13:25 #19
OK

men studer ASP.NET web controller lidt - det er en god investering !
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