Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[BUG] Cursor with fetchSize > 1 results in error on prepared statement

Aperta
#329 8 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
38/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
javascript, node.js, sql
Ambito
database

Direzione di ricerca

Inizia riproducendo il percorso dell’istruzione preparata usando statement.prepare, statement.execute({ fetchSize: 2 }) e cursor.fetch con SQL Server. Confrontalo con l’esecuzione senza un’istruzione preparata e traccia la gestione del cursore che produce l’errore "Invalid cursor position". Il lavoro è completato quando fetchSize maggiore di 1 funziona con le istruzioni preparate e preserva il comportamento normale del cursore.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

confirmed

Describe your system

  • odbc Package Version: 2.4.7
  • ODBC Driver: Microsoft ODBC Driver Version 18
  • Database Name: SQLServer
  • Database Version: 2019
  • Database OS: Windows
  • Node.js Version: 16.15.1
  • Node.js OS: Mac OS Ventura 13.3

Describe the bug
The ODBC driver returns a "Invalid cursor position" error if a fetchSize > 1 is specified for a prepared statement in statement.execute.

Expected behavior
Regular cursor behaviour when specifying a fetchSize > 1

To Reproduce

  1. Create a simple test table: CREATE TABLE test (id int);
  2. Insert some rows: INSERT INTO test values (1),(2),(3),(4),(5);
  3. Execute the code as specified below. This will result in the described error.

Code

const odbc = require('odbc');

async function connectToDatabase() {
    const connectionConfig = {
        connectionString: 'DSN=MSSQL2019;uid=sa;pwd=iRefact2017;MARS_Connection=no;trustServerCertificate=yes',
        connectionTimeout: 10,
        loginTimeout: 10
    };

    const connection = await odbc.connect(connectionConfig);
    const statement = await connection.createStatement();
    await statement.prepare('select * from IR_TSTGIN.dbo.test;');
    let cursor = await statement.execute({
        fetchSize: 2
    });
    let result = await cursor.fetch();
    await cursor.close();
}

connectToDatabase()
    .catch(error => {
        console.dir(error, {
            depth: null
        });
    });

Additional context

Specifying a fetchSize without a prepared statement does return as expected. So it seems that something goes wrong with a cursor on a prepared statement.

Lingua principale
JavaScript
Stelle
159
Fork
92
Merge medio
5h 59m
PR unite (30g)
3

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di IBM/node-odbc

Tutte le issue di IBM/node-odbc

Issue simili

Altre issue su JavaScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.