BDehmel
20-06-08, 06:54
Hallo,
ich wollte einen Block-Transfer in einem meiner Programme durchführen, um die Netzwerklast zu senken, bzw die Anzahl der Fetches und der darauf resultierenden Antworten zu mindern.
Diesen initialisiere ich wie folgt:
// Row-Wise Binding: Groesse der Struktur wird uebergeben
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER) sizeof (S_BLOCK_PERSSTAMM), 0))
{
// Anzahl der zu lesenden Zeilen
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) sAnzahlRows, 0))
{
// Anzahl der gelesenen Zeilen
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROWS_FETCHED_PTR, iAnzahlRowsRead, 0))
{
// Stati der einzelnen Zeilen
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROW_STATUS_PTR, sStatusArray, 0))
{ ....
Leider war das Ergebnis genau das Gegenteil von dem, was ich bewirken wollte: Mit einem Fetch bekomme ich zwar alle Datensätze zurück, aber es dauert wesentlich länger als wenn ich jeden Datensatz einzeln hole.
Meine Vorstellung dazu ist (100 Datensätze):
Normal: 100 - Fetches, 100 - Antworten = 200 Netzwerkpakete
Block-Transfer: 2 - Fetches, 2 - Antworten = 4 Netzwerkpakete
Warum ist das so? Mache ich da etwas falsch?
Gruß Björn
ich wollte einen Block-Transfer in einem meiner Programme durchführen, um die Netzwerklast zu senken, bzw die Anzahl der Fetches und der darauf resultierenden Antworten zu mindern.
Diesen initialisiere ich wie folgt:
// Row-Wise Binding: Groesse der Struktur wird uebergeben
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROW_BIND_TYPE, (SQLPOINTER) sizeof (S_BLOCK_PERSSTAMM), 0))
{
// Anzahl der zu lesenden Zeilen
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROW_ARRAY_SIZE, (SQLPOINTER) sAnzahlRows, 0))
{
// Anzahl der gelesenen Zeilen
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROWS_FETCHED_PTR, iAnzahlRowsRead, 0))
{
// Stati der einzelnen Zeilen
if (! SQLSetStmtAttr (sqlStatement, SQL_ATTR_ROW_STATUS_PTR, sStatusArray, 0))
{ ....
Leider war das Ergebnis genau das Gegenteil von dem, was ich bewirken wollte: Mit einem Fetch bekomme ich zwar alle Datensätze zurück, aber es dauert wesentlich länger als wenn ich jeden Datensatz einzeln hole.
Meine Vorstellung dazu ist (100 Datensätze):
Normal: 100 - Fetches, 100 - Antworten = 200 Netzwerkpakete
Block-Transfer: 2 - Fetches, 2 - Antworten = 4 Netzwerkpakete
Warum ist das so? Mache ich da etwas falsch?
Gruß Björn