Avatar billede Kim Neesgaard Seniormester
30. marts 2005 - 14:26 Der er 7 kommentarer og
1 løsning

SQL selecter een record for lidt

Jeg har en .aspx side, der opretter forbindelse til en Access database. Der optræder dog det mærkelige fænomen, at SQL' en på .aspx siden konsekvent finder een record for lidt i forhold til tabelindholdet. Hvis jeg laver nøjagtig den sammme SQL i Access databasen, findes det forventede antal records.
For at koncentrere fænomenet, har jeg lavet en simpel testside og den har følgende kode:

<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.Oledb" %>
<script runat="server">

    ' Insert page code here
    '
   
    Sub Button1_Click(sender As Object, e As EventArgs)
    Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;user id=admin;password=;data source=" & Server.MapPath("BBSNET.mdb"))
    Dim SQLTekst as OleDbCommand
    Dim strSQL as String
    objConn.Open()
    strSQL = "SELECT * FROM tblResults"
    SQLTekst = New OleDbCommand(strSQL, objConn )
    Dim rs As OleDbDataReader = SQLtekst.ExecuteReader()
    rs.Read()
    DataGrid1.DataSource = rs
    DataGrid1.DataBind()
    textbox1.text = strsql
    rs.close
    objconn.close
    End Sub

</script>
<html>
<head>
</head>
<body>
    <form runat="server">
        <asp:DataGrid id="DataGrid1" runat="server"></asp:DataGrid>
        <asp:TextBox id="TextBox1" runat="server" Width="287px" Height="126px" TextMode="MultiLine"></asp:TextBox>
        <asp:Button id="Button1" onclick="Button1_Click" runat="server" Text="Button"></asp:Button>
        <!-- Insert content here -->
    </form>
</body>
</html>

Der vises kun een record i datagrid1, men der er 2 records i tabellen og de er forskellige:

ID    Result    Evaluation    Percentage    Date    Month    Quarter    Year
22    1    2    0    05-01-2005    1    1    2005
22    2    1    0               


Kender I dette fænomen og hvad man kan gøre ved det?
Avatar billede arne_v Ekspert
30. marts 2005 - 14:30 #1
drop den her linie:

rs.Read()
Avatar billede Kim Neesgaard Seniormester
30. marts 2005 - 14:34 #2
Vil det sige, at rs.Read() svarer til en rs.MoveNext og at jeg dermed selv udelukker første record? Jeg troede faktisk, at den skulle med, men jeg har meget at lære i .NET!!!
Avatar billede arne_v Ekspert
30. marts 2005 - 14:45 #3
Hvis du processe manuelt bruger du:

while(rs.Read())
{
}

men det samme gør data griden - og derfor er jeg 99% sikker på at det er derfor
der forsvinder en record
Avatar billede Kim Neesgaard Seniormester
30. marts 2005 - 14:48 #4
Det er det!! Det virker helt, når rs.Read() slettes. Dette kræver vist et svar!
Avatar billede arne_v Ekspert
30. marts 2005 - 14:49 #5
svar
Avatar billede Kim Neesgaard Seniormester
30. marts 2005 - 15:32 #6
Lige et tillægsspørgsmål: hvis man nu rs.Read()'er gennem hele recordsettet, findes der så en 'MoveFirst'-agtig kommando, der bringer cusoren til toppen?
Avatar billede arne_v Ekspert
30. marts 2005 - 15:37 #7
Det tror jeg faktisk ikke at man kan. Jeg tror at man skal reexecute queryen.
Avatar billede burningice Nybegynder
30. marts 2005 - 16:13 #8
en datareader er forward-only. Hvis du har brug for at springe frem og tilbage mellem posterne skal du først læse det ind i et DataTable-object.
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