Avatar billede Kim Neesgaard Seniormester
21. marts 2005 - 15:11 Der er 22 kommentarer og
1 løsning

Antal records i et recordset

Jeg har været lidt rundt i de øvrige spørgsmål og svar om en måde at tælle anatal records i et recordset, men er stadig ikke sikker på, hvordan man gør det. Jeg har følgende kode:

SQLTekst = New OleDbCommand(strSQL, objConn )
Dim rs As OleDbDataReader = SQLtekst.ExecuteReader()
rs.Read()

og så er det, at jeg gerne vil aflæse antal linier (eller nul for ingen records). Er det slet ikke muligt på en nem måde? Det må da være noget, mange har brug for.
Avatar billede snepnet Nybegynder
21. marts 2005 - 15:16 #1
du kan bare tælle op på
int count = 0;
while(rs.Read()....
count++;

ellers kan du suge det op i et dataset istedet - så kan du få antallet af records i de tabeller der kommer med op.

mvh
Avatar billede snepnet Nybegynder
21. marts 2005 - 15:17 #2
Eksempel hvor henter noget op i et dataset :

SqlConnection con = new SqlConnection("...");
SqlCommand selectCommand = new SqlCommand("select * from sometable", con);
SqlDataAdapter adapter = new SqlDataAdapter(selectCommand);
DataSet ds = new DataSet();
adapter.Fill(ds);

antallet af rækker vil du så kunne finde ved :

int numberOfRows = ds.Tables[0].Rows.Count;

mvh
Avatar billede snepnet Nybegynder
21. marts 2005 - 15:19 #3
hvis du vil kende antallet inden du henter din data med en reader kommer du nok til at lave en :
"select count(id) from tblsomething" og så lave en
.ExecuteScalar() på en sådan kommando.

mvh
Avatar billede snepnet Nybegynder
21. marts 2005 - 15:21 #4
og... lige til sidst kan du også kombinere forespørgslerne - f.eks. som vist her :

http://www.123aspx.com/redir.aspx?res=28882

mvh
Avatar billede Kim Neesgaard Seniormester
21. marts 2005 - 15:51 #5
Tak for de mange gode råd! Kan man overføre rs til en funktion og så få den til at returnere antal records efter at have spolet dem igennem i funktionen? Dette ville ligne den gode gamle .RecordCount.
Avatar billede snepnet Nybegynder
21. marts 2005 - 15:57 #6
ja en reader kan snildt være en parameter til en funktion... du skal bare huske at lukke den og alt det der som du plejer.
mvh
Avatar billede snepnet Nybegynder
21. marts 2005 - 16:00 #7
måske kunne du endda bruge metode til at returnere readeren, og så have en output-parameter hvor antallet kan angive.

så kunne du have noget i denne stil :
int antal = 0;
OleDbDataReaer reader = GetReader(out antal);

hvis du så sørger for at gøre det som foreslået 15:19:54 eller 15:21:32 ville du efter at have kaldt metoden stå med en reader klar til brug + antallet af records du ville kunne forvente at suge op.

mvh
Avatar billede snepnet Nybegynder
21. marts 2005 - 16:09 #8
altså sådan noget i denne stil (bare sådan lidt pseudoagtigt) :

private OleDbDataReader GetReader(out recordCount)
{
  // ... reader til at tælle med, hvis du bruger den fra 15:19:54
  recordCount = (int)countCommand.ExecuteScalar();
 
  // ... og så den reader du bruger til at gufle data op med.
  return theRealReader;
}

Så har du begge dele til rådighed der hvor du bruger readeren.
(som skrevet før :)
int antal = 0;
OleDbDataReaer reader = GetReader(out antal);

mvh
Avatar billede skyggen2000 Nybegynder
21. marts 2005 - 16:23 #9
Er det det her du har brug for?
                        DBManager aDBManager = new DBManager();

            DataTable aDependentList;
           
            aDependentList = aDBManager.ExecuteSQLDataTable(aStrSQL);

            for (int i=0; i < aDependentList.Rows.Count; i++)
            {...}   

Så kører den din select igennem hvis der er nogle records.
Avatar billede Kim Neesgaard Seniormester
22. marts 2005 - 14:17 #10
snepnet -> Hvordan vil den konkrete kode til funtionen se ud? Jeg kan endnu ikke 'improvisere' og mange af kommandoerne har jeg ikke set før?

skyggen2000 -> Kan man have dit forslag som en funktion? Hvordan kunne den konkret se ud? Er det vb?
Avatar billede skyggen2000 Nybegynder
22. marts 2005 - 14:21 #11
det er C#.

Du kan sagtens have den som en funktion. Du kan have det hvor du har lyst til.
Avatar billede skyggen2000 Nybegynder
22. marts 2005 - 14:24 #12
Var ikke lige opmærksom på du ville skrive det i VB. Der kan ikke være meget forskel.
Avatar billede snepnet Nybegynder
22. marts 2005 - 18:39 #13
Hej igen - undskyld jeg har været lidt langsom.

Den kunne se sådan her ud (hvis du bruger den fra 15:21:32) :

private SqlDataReader GetReader(out recordCount)
{
  SqlConnection con = new SqlConnection(someConnectionString);
  SqlCommand selectCommand = new SqlCommand("select count(*) from tblsomething;select * from tblsomething;", con);
  con.Open();
  SqlDataReader reader = selectCommand.ExecuteReader(CommandBehavior.CloseConnection);
  reader.Read();
  recordCount = reader.GetInt32(0);
 
  return reader();
}

og du kan så kalde den sådan her :

int recordCount = 0;
SqlDataReader reader = GetReader(out recordCount);

så har du antal og reader klar til brug.

mvh

mvh
Avatar billede snepnet Nybegynder
22. marts 2005 - 18:39 #14
hov... du skal så lige skifte Sqlxxx ud med OleDbxxx - sorry.
mvh
Avatar billede Kim Neesgaard Seniormester
23. marts 2005 - 10:42 #15
.NET er smart, men hvor er det dog svært!! Jeg må nok bede om lidt hjælp!

Er 'private SqlDataReader GetReader(out recordCount)' det man 'i gamle dage' kaldte en 'Function'? Kan det blot skrives som det står her?

Vil du forklare, hvad denne konkret gør: 'SqlDataReader reader = GetReader(out recordCount);'? Pendanten til 'gamle dage' er nok Function(enværdi)?

Undskyld de mange spørgsmål, men begrebsverdenen er en helt anden i .NET, synes jeg.
Avatar billede snepnet Nybegynder
23. marts 2005 - 10:47 #16
bare iorden :o)

ja - det er "bare" en funktion.... den returnerer dig en DataReader, og du kan bare skrive den som den står (hvis du koder i c#).

den datareader du så får returneret kan du bruge som du vil.... og du skal så huske at lukke den når du er færdig (reader.Close();)

hvis du vil konvertere noget af det c# jeg skriver til dig til vb kan du give det et forsøg her :
http://www.developerfusion.com/utilities/convertcsharptovb.aspx

mvh
Avatar billede snepnet Nybegynder
07. september 2005 - 17:45 #17
hvordan går det her neesgaard?
(et svar her, hvis noget har været brugbart)
mvh
Avatar billede Kim Neesgaard Seniormester
08. september 2005 - 12:10 #18
Indtil nu har jeg ikke rigtig fået det til at virke, men jeg forsøger igen - så vender jeg tilbage.
Avatar billede snepnet Nybegynder
08. september 2005 - 12:11 #19
ok :o)
Avatar billede Kim Neesgaard Seniormester
08. september 2005 - 16:28 #20
Jeg har nu forsøgt mig med adapteren, men denne

SqlDataAdapter adapter = new SqlDataAdapter(selectCommand)

giver mig fejlen

Name 'SqlDataAdapter' is not declared

Hvordan erklærer man sådan en?
Avatar billede snepnet Nybegynder
08. september 2005 - 16:44 #21
du kan bare lave en
using System.Data.SqlClient;
i toppen af din fil.
mvh
Avatar billede snepnet Nybegynder
08. september 2005 - 16:45 #22
hov - du bruger vb - så hedder det Imports mener jeg (istedet for using).
mvh
Avatar billede Kim Neesgaard Seniormester
17. oktober 2005 - 14:58 #23
Nu fik jeg det endelig til at virke - jeg bruger dette:

Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("/DbTest.mdb") & ";")
objConn.Open()
Dim selectCommand As New OleDbCommand("Select * from tblTable1", objConn)
Dim adapter As New OleDbDataAdapter(selectCommand)
Dim ds As New DataSet()
adapter.Fill(ds)

Dim numberOfRows As Integer = ds.Tables(0).Rows.Count

Tak!
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