SQLDescribeParam
Per descrivere i parametri di qualsiasi istruzione SQL, il driver ODBC di SQL Server Native Client genera ed esegue un'istruzione Transact-SQL SELECT quando viene chiamato SQLDescribeParam su un handle di istruzione ODBC preparata. Il driver utilizza l'istruzione SET FMTONLY durante l'esecuzione della query. I metadati del set di risultati determinano le caratteristiche dei parametri dell'istruzione preparata.
Si consideri l'istruzione ODBC SQL seguente:
INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES (?, ?, ?)
In una chiamata a SQLDescribeParam questa istruzione ODBC SQL determina l'esecuzione delle istruzioni Transact-SQL seguenti da parte del driver:
SET FMTONLY ON
SELECT ShipperID, CompanyName, Phone FROM Shippers
SET FMTONLY OFF
SQLDescribeParam può, pertanto, restituire qualsiasi codice di errore che potrebbe essere restituito da SQLExecute o SQLExecDirect.
Inoltre, il driver non supporta la chiamata SQLDescribeParam nelle situazioni seguenti:
Dopo l'esecuzione di SQLExecDirect per qualsiasi istruzione Transact-SQL UPDATE o DELETE contenente la clausola FROM.
Per qualsiasi istruzione ODBC o Transact-SQL contenente un parametro in una clausola HAVING o confrontata con il risultato di una funzione SUM.
Per qualsiasi istruzione ODBC o Transact-SQL a seconda di una subquery che contiene parametri.
Per le istruzioni ODBC SQL che contengono indicatori di parametro in entrambe le espressioni di un predicato di confronto, LIKE o quantificato.
Per qualsiasi query in cui uno dei parametri è il parametro di una funzione.
Quando sono presenti commenti (/* */) nel comando Transact-SQL.
In caso di elaborazione di un batch di istruzioni Transact-SQL, il driver non supporta inoltre la chiamata a SQLDescribeParam per gli indicatori di parametro nelle istruzioni dopo la prima istruzione del batch.
Per la descrizione dei parametri di stored procedure preparate, SQLDescribeParam utilizza la stored procedure di sistema sp_sproc_columns per recuperare le caratteristiche dei parametri. sp_sproc_columns può riportare dati per le stored procedure nel database utente corrente. La preparazione di un nome di stored procedure completo consente l'esecuzione di SQLDescribeParam nel database. La stored procedure di sistema sp_who può ad esempio essere preparata ed eseguita in qualsiasi database come indicato di seguito:
SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);
Se si esegue SQLDescribeParam in seguito a una preparazione riuscita, viene restituito un set di righe vuoto quando si è connessi a qualsiasi database, purché di tipo master. La stessa chiamata, preparata come segue, determina la riuscita di SQLDescribeParam indipendentemente dal database utente corrente:
SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);
Nel caso dei tipi di dati con valori di grandi dimensioni, il valore restituito in DataTypePtr è SQL_VARCHAR, SQL_VARBINARY o SQL_NVARCHAR. Per indicare che le dimensioni del parametro del tipo di dati per valori di grandi dimensioni sono illimitate, il driver ODBC di SQL Server Native Client imposta ParameterSizePtr su 0. Vengono restituiti i valori delle dimensioni effettive per i parametri varchar standard.
[!NOTA]
Se il parametro è già stato associato alle dimensioni massime del parametro SQL_VARCHAR, SQL_VARBINARY o SQL_WVARCHAR, vengono restituite le dimensioni associate limitate del parametro.
Per associare un parametro di input di dimensioni illimitate, è necessario utilizzare data-at-execution. Non è possibile associare un parametro di output di dimensioni illimitate. Non esiste un metodo per l'invio in flusso dei dati da un parametro di output (funzione svolta da SQLGetData per i set di risultati).
Per i parametri di output è necessario associare un buffer. Se il valore è troppo grande, il buffer viene riempito e vengono restituiti un messaggio SQL_SUCCESS_WITH_INFO e un avviso "Troncamento a destra della stringa di dati". I dati troncati verranno quindi eliminati.
SQLDescribeParam e parametri con valori di tabella
Un'applicazione consente di recuperare le informazioni sui parametri con valori di tabella per un'istruzione preparata con SQLDescribeParam. Per ulteriori informazioni, vedere Metadati del parametro con valori di tabella per le istruzioni preparate.
Per ulteriori informazioni generiche sui parametri con valori di tabella, vedere Parametri con valori di tabella (ODBC).
Supporto di SQLDescribeParam per le funzionalità avanzate di data e ora
I valori restituiti per i tipi date/time sono i seguenti:
DataTypePtr |
ParameterSizePtr |
DecimalDigitsPtr |
|
---|---|---|---|
datetime |
SQL_TYPE_TIMESTAMP |
23 |
3 |
smalldatetime |
SQL_TYPE_TIMESTAMP |
16 |
0 |
date |
SQL_TYPE_DATE |
10 |
0 |
time |
SQL_SS_TIME2 |
8, 10..16 |
0..7 |
datetime2 |
SQL_TYPE_TIMESTAMP |
19, 21..27 |
0..7 |
datetimeoffset |
SQL_SS_TIMESTAMPOFFSET |
26, 28..34 |
0..7 |
Per ulteriori informazioni, vedere Miglioramenti relativi a data e ora (ODBC).
Supporto di SQLDescribeParam per i tipi CLR definiti dall'utente di grandi dimensioni
SQLDescribeParam supporta i tipi CLR definiti dall'utente di grandi dimensioni. Per ulteriori informazioni, vedere Tipi CLR definiti dall'utente di grandi dimensioni (ODBC).
Vedere anche