Re: Client Cursor oder Server Cursor?

Tech-Archive recommends: Fix windows errors by optimizing your registry

From: Elmar Boye (ElmarB_at_gmx.net)
Date: 10/04/04


Date: Mon, 4 Oct 2004 10:01:19 +0200

Hallo Thomas,

Thomas Östreich <bla@bla.de> schrieb ...
>>> Was ist besser bei ADODB/OLEDB beim Zugriff auf MSSQL / MSDE
>>> ClientCursor oder ServerCursor?
>>
>> Favorisiert wird seit längerem der Clientseitige Cursor.
>> Und Du solltest Dich anschliessen, denn die neueren Technologien
>> wie .NET unterstützen ausschliesslich clientseitige Cursor.
>
> Ist denn ADO.NET kein Layer über OLEDB?

Nein! Ähnlichkeiten in Namensbestandteilen sind rein zufällig
und vom Marketing erfunden ;-))
ADO.NET hat zwar einen OleDb Client, der auf dem OleDb API aufsetzt.
Es wird aber nur ein sehr kleiner Teil der OleDb Spezifikation genutzt.
Im Prinzip wird nur noch die Vorwärts/Nur-Lese Variante (adForwardOnly/
adLockReadOnly) verwendet, das ist dann der DataReader.
Und die Daten ansonsten wie bei der Client Bibliothek in Form von
.NET Komponenten (DataSet/DataTable), was vollkommen unabhängig von
OleDb ist. Die Bearbeitung erfolgt dort abgekoppelt von der Datenbank.

Änderungen an der Datenbank werden durch explizite Befehle vorgenommen,
wobei auch Prozeduren zulässig sind. Wobei der DataAdapter den Mittler
zwischen DataTable und Datenbank darstellt.
Es gibt zwar einen sog. CommandBuilder, der das automat. Erstellen von
Aktualisierungs-Befehlen übernehmen kann. Der implementiert aber
nur Teile der Möglichkeiten, wie sie ADO kennt.

Insgesamt ist es konzeptionell äquivalent zur OleDb Client Bibliothek
mit adLockBatchOptimistic Einstellungen - allerdings im Detail mit
reichlich Unterschieden.
Mehr dazu findest Du in der .NET Framework Dokumentation - Online:
http://msdn.microsoft.com/library/default.asp?url=/library/deu/cpguide/html/cpconaccessingdatawithadonet.asp

Summa summarum dürfte es jemanden, der seine Programmierung auf ADO die
Client-Bibliothek eingestellt hat, aber deutlich leichter fallen,
später ADO.NET einzusetzen.

> Bei einem test zwischen Server-Cursor und Client-Cursor stellte ich
> fest das bei einen Open (ADODB) beide genauso schnell sind, obwohl
> ich dachte das eine Client-Cursor alle Daten hollt.
> Oder?

Holt der Client Cursor auch.
Nur auch ein Server Cursor erfordert - je nach Abfrage mehr oder weniger -
Vorleistung und zwar beim Server. So erstellt der SQL Server ein internes
Recordset in der tempdb zumindest über die Schlüsselinformationen.

Während der Client Cursor für den Abruf ein ForwardOnly/ReadOnly
Recordset verwendet, dass beim SQL Server meist kaum Ressourcen
belegt und somit wesentlich schneller abgearbeitet wird.

Wesentlich langsamer wird ein Client Cursor erst wenn die Rückgabe
so gross ist, dass der Hauptspeicher des Clients überläuft. Aber
dann hat man auch mit dem Server Cursor meist schon das eine oder
andere Problem, wie Sperren, Timeouts uam.

> Hm da gibt es ja noch ein weiteres DBPROPSET und zwar DBPROPSET_ADC
> welches ich nur durch zufall fand. Da dieses nicht im Index bei der
> MSDN / PSDK auftaucht nur durch suchen in der Hilfe.

Näheres steht im Appendix C der Ole DB Hilfe. Wobei ADC als Akronym
wohl für ADO Cursor Service steht. Und in der Regel wird das eben
als Client Cursor Bibliothek angesprochen.

Gruss
Elmar



Relevant Pages

  • Re: nVarchar limitations using OLEDB provider
    ... but not nvarcharor greater using a clientside cursor. ... is IMHO what OLEDB is designed for: ... Unless of course this OLEDB provider is not supported at all..... ... The issue may actually lie on the client code and not on the ...
    (microsoft.public.sqlserver.ce)
  • Re: VB connection to SQL server
    ... > the client machine begins to lose its relevance and accuracy as soon as it ... > aware that the data is probably out of date, a client sided cursor might ... > design minimises the possibility that records will have changed in the ... >> The Database server is in the office, and people use the Vb program from ...
    (microsoft.public.vb.database)
  • Re: VB connection to SQL server
    ... "Chris Barber" wrote in message ... > recordsets (client side cursor) to allow you to persist the recordsets to ... aware that the data is probably out of date, a client sided cursor might fit ... That is because the SELECT statement is executed on the server and the data ...
    (microsoft.public.vb.database)
  • Re: cancel ADO2.8 asynchron queries over WAN, takes long time
    ... >> the .open method first creates the recordset at the server. ... I use clientside cursor to minimalize the traffic... ... You do not want to be managing any types of cursors on the client ... > doing so over a slow link is a bad choice. ...
    (microsoft.public.sqlserver.programming)
  • Re: cancel ADO2.8 asynchron queries over WAN, takes long time
    ... >> the .open method first creates the recordset at the server. ... I use clientside cursor to minimalize the traffic... ... You do not want to be managing any types of cursors on the client ... > doing so over a slow link is a bad choice. ...
    (microsoft.public.vb.database.ado)