Funzione SQLGetStmtAttr

Conformità
Versione introdotta: Conformità agli standard ODBC 3.0: ISO 92

Sommario
SQLGetStmtAttr restituisce l'impostazione corrente di un attributo di un'istruzione.

Note

Per maggiori informazioni su cosa mappa questa funzione il Driver Manager quando si tratta di un ODBC 3. L'applicazione x funziona con un ODBC 2. driver x , vedi Mappatura delle funzioni di sostituzione per la retrocompatibilità delle applicazioni.

Sintassi

  
SQLRETURN SQLGetStmtAttr(  
     SQLHSTMT        StatementHandle,  
     SQLINTEGER      Attribute,  
     SQLPOINTER      ValuePtr,  
     SQLINTEGER      BufferLength,  
     SQLINTEGER *    StringLengthPtr);  

Arguments

StatementHandle
[Input] Handle di istruzione.

Attributo
[Input] Attribuisce per recuperare.

ValuePtr
[Output] Punta a un buffer in cui restituire il valore dell'attributo specificato in Attributo.

Se ValuePtr è NULL, StringLengthPtr restituirà comunque il numero totale di byte (escluso il carattere di null-termination per i dati del carattere) disponibili nel buffer indicato da ValuePtr.

BufferLength
[Input] Se Attribute è un attributo definito da ODBC e ValuePtr punta a una stringa di caratteri o a un buffer binario, questo argomento deve essere la lunghezza di *ValuePtr. Se Attribute è un attributo definito da ODBC e *ValuePtr è un intero, BufferLength viene ignorato. Se il valore restituito in *ValuePtr è una stringa Unicode (quando si chiama SQLGetStmtAttrW), l'argomento BufferLength deve essere un numero pari.

Se l'Attributo è definito dal driver, l'applicazione indica la natura dell'attributo al Driver Manager impostando l'argomento BufferLength . BufferLength può avere i seguenti valori:

  • Se *ValuePtr è un puntatore a una stringa di carattere, allora BufferLength è la lunghezza della stringa o della SQL_NTS.

  • Se *ValuePtr è un puntatore a un buffer binario, allora l'applicazione inserisce il risultato della macro SQL_LEN_BINARY_ATTR(length) in BufferLength. Questo attribuisce un valore negativo a BufferLength.

  • Se *ValuePtr è un puntatore a un valore diverso da una stringa di carattere o binaria, allora BufferLength dovrebbe avere il valore SQL_IS_POINTER.

  • Se *ValuePtr contiene un tipo di dato a lunghezza fissa, allora BufferLength è o SQL_IS_INTEGER o SQL_IS_UINTEGER, a seconda dei conti.

StringLengthPtr
[Output] Un puntatore a un buffer in cui restituire il numero totale di byte (escluso il carattere di terminazione nulla) disponibili da restituire in *ValuePtr. Se il valore dell'attributo è una stringa di caratteri e il numero di byte disponibili da restituire è maggiore o uguale a BufferLength, i dati in *ValuePtr vengono troncati a BufferLength meno la lunghezza di un carattere a null-termination e vengono null-terminati dal driver.

Returns

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnostica

Quando SQLGetStmtAttr restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, un valore SQLSTATE associato può essere ottenuto chiamando SQLGetDiagRec con un HandleType di SQL_HANDLE_STMT e un Handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLGetStmtAttr e li spiega nel contesto di questa funzione; la notazione "(DM)" precede le descrizioni degli stati SQL restituite dal Driver Manager. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.

SQLSTATE Error Description
01000 Avviso generale Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
01004 Dati stringa, troncati a destra I dati restituiti in *ValuePtr sono stati troncati per essere BufferLength meno la lunghezza di un carattere a terminazione nulla. La lunghezza del valore della stringa non runcata viene restituita in *StringLongPtr. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
24000 Stato del cursore non valido L'argomento Attributo era SQL_ATTR_ROW_NUMBER e il cursore non era aperto, oppure il cursore era posizionato prima dell'inizio del set di risultati o dopo la fine del set di risultati.
HY000 Errore generale Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nell'argomento MessageText descrive l'errore e la sua causa.
HY001 Errore di allocazione della memoria Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY010 Errore della sequenza di funzioni (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando veniva chiamata la funzione SQLGetStmtAttr .

(DM) È stata chiamata una funzione in esecuzione asincrona per StatementHandle ed era ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.
HY013 Errore di gestione della memoria Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente.
HY090 Lunghezza della stringa o del buffer non valida (DM) *ValuePtr è una stringa di caratteri, e BufferLength era inferiore a zero, ma non uguale a SQL_NTS.
HY092 Identificatore di attributo/opzione invalido Il valore specificato per l'argomento Attributo non era valido per la versione di ODBC supportata dal driver.
HY109 Posizione del cursore non valida L'argomento dell'Attributo era SQL_ATTR_ROW_NUMBER e la riga era stata cancellata o non poteva essere recuperata.
HY117 La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran.
HYC00 Funzionalità facoltativa non implementata Il valore specificato per l'attributo dell'argomento era un attributo valido di un'istruzione ODBC per la versione di ODBC supportata dal driver, ma non era supportato dal driver.
HYT01 Il timeout della connessione è scaduto Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Il driver non supporta questa funzione (DM) Il driver corrispondente a StatementHandle non supporta la funzione.

Comments

Per informazioni generali sugli attributi delle dichiarazioni, vedi Attributi delle dichiarazioni.

Una chiamata a SQLGetStmtAttr restituisce in *ValuePtr il valore dell'attributo dell'istruzione specificato in Attributo. Quel valore può essere un valore SQLULEN o una stringa di caratteri terminata a nullo. Se il valore è un valore SQLULEN, alcuni driver possono scrivere solo il buffer inferiore a 32 o 16 bit e lasciare invariato il bit di ordine superiore. Pertanto, le applicazioni dovrebbero utilizzare un buffer di SQLULEN e inizializzare il valore a 0 prima di chiamare questa funzione. Inoltre, gli argomenti BufferLength e StringLengthPtr non vengono utilizzati. Se il valore è una stringa terminata nullo, l'applicazione specifica la lunghezza massima di quella stringa nell'argomento BufferLength , e il driver restituisce la lunghezza di quella stringa nel buffer *StringLengthPtr .

Per permettere alle applicazioni che chiamano SQLGetStmtAttr di lavorare con ODBC 2. x , una chiamata a SQLGetStmtAttr è mappata nel Driver Manager a SQLGetStmtOption.

I seguenti attributi delle istruzioni sono di sola lettura, quindi possono essere recuperati da SQLGetStmtAttr, ma non impostati da SQLSetStmtAttr:

  • SQL_ATTR_IMP_PARAM_DESC

  • SQL_ATTR_IMP_ROW_DESC

  • SQL_ATTR_ROW_NUMBER

Per un elenco degli attributi che possono essere impostati e recuperati, vedi SQLSetStmtAttr.

Per informazioni su Vedi
Restituzione dell'impostazione di un attributo di connessione Funzione SQLGetConnectAttr
Impostazione di un attributo di connessione Funzione SQLSetConnectAttr
Impostazione di un attributo di istruzione Funzione SQLSetStmtAttr