Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[.NET] Data Access Application Block

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi!

Voor een project moet ik gebruik maken van de Enterprise Library, nl de Data Access Application Block. Nu is het me gelukt dit aan de praat te krijgen door volgende code:

code:
1
2
3
4
SqlDatabase db = new SqlDatabase(connString);
DbCommand dbCommand = db.GetSqlStringCommand("SELECT * FROM " + name + " ORDER BY "+sort+" ASC");
DataSet res = new DataSet();            
res = db.ExecuteDataSet(dbCommand);


Nu is mijn probleem dat de code rekening moet houden met enorme tabellen en dat de volledige tabel in het geheugen laden geen optie is. Ik zou moeten de volledige tabel verwerken in stukjes van bv 100 records, deze records verwerken, de volgende 100 ophalen enz.
Alleen geraak ik er niet aan uit hoe ik dit met de Enterprise Library moet doen?
Het programma werkt zowel met SQL Server 2005 als met Oracle.

Weet iemand hier een oplossing voor?

Alvast bedankt!

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:01
Je kan toch mbhv je SQL statement je resultset limiteren ? (Gebruik maken van WHERE of TOP oid ? ).
Wat ga je trouwens doen met al die gegevens ? Wat moet je doen qua verwerking ?

Als je programma zowel met oracle als sql server werkt, hoe implementeer je dit dan ? Ik bedoel, hoe maak je abstractie van je SQL statements, want het oracle dialect is anders dan je Sql Server dialect.

https://fgheysels.github.io/


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je vergeet even dat voordat je iets kunt opdelen je eerst moet weten wat het totaal is. Je zult toch moeten achterhalen dat je query 385 resultaten terug geeft om vervolgens paginering toe te passen.

Als je het totaal hebt kunt je in SQL Server met row_number() de resultset beperkten.
SQL:
1
2
3
4
5
6
7
8
9
10
11
USE AdventureWorks;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
@whomai:

Maar hoe weet ik wanneer ik alle records heb opgehaald indien ik TOP gebruik?

Laat ons zeggen dat al die gegevens moeten weggeschreven worden naar een bestand onder een bepaald formaat.

Om zowel met Oracle als SQL Server te werken, maak ik gebruik van een design pattern. Elke functie geeft hetzelfde terug, maar de implementatie is gewoon afhankelijk van de databank.

(edit) whoeps, Niemand_Anders bericht niet op tijd gezien 8)7

[ Voor 9% gewijzigd door Verwijderd op 02-04-2008 11:14 ]