SQLPutData-Funktion

Konformität
Eingeführte Version: ODBC 1.0-Standards Compliance: ISO 92

Zusammenfassung
SQLPutData ermöglicht es einer Anwendung, Daten für einen Parameter oder eine Spalte zum Zeitpunkt der Anweisungsausführung an den Treiber zu senden. Diese Funktion kann verwendet werden, um Zeichen- oder Binärdatenwerte in Teilen an eine Spalte mit einem zeichen-, binär- oder datenquellenspezifischen Datentyp (z. B. Parameter des SQL_LONGVARBINARY- oder SQL_LONGVARCHAR-Typs) zu senden. SQLPutData unterstützt die Bindung an einen Unicode C-Datentyp, auch wenn der zugrunde liegende Treiber keine Unicode-Daten unterstützt.

Syntax

  
SQLRETURN SQLPutData(  
      SQLHSTMT     StatementHandle,  
      SQLPOINTER   DataPtr,  
      SQLLEN       StrLen_or_Ind);  

Argumente

StatementHandle
[Eingabe] Anweisungshandle.

DataPtr
[Eingabe] Zeiger auf einen Puffer, der die tatsächlichen Daten für den Parameter oder die Spalte enthält. Die Daten müssen im C-Datentyp enthalten sein, der im ValueType-Argument von SQLBindParameter (für Parameterdaten) oder im TargetType-Argument von SQLBindCol (für Spaltendaten) angegeben ist.

StrLen_or_Ind
[Eingabe] Länge von *DataPtr. Gibt die Datenmenge an, die bei einem Aufruf von SQLPutData gesendet wird. Die Datenmenge kann bei jedem Aufruf für einen bestimmten Parameter oder eine spalte variieren. StrLen_or_Ind wird ignoriert, es sei denn, es erfüllt eine der folgenden Bedingungen:

  • StrLen_or_Ind ist SQL_NTS, SQL_NULL_DATA oder SQL_DEFAULT_PARAM.

  • Der in SQLBindParameter oder SQLBindCol angegebene C-Datentyp ist SQL_C_CHAR oder SQL_C_BINARY.

  • Der C-Datentyp ist SQL_C_DEFAULT, und der C-Standarddatentyp für den angegebenen SQL-Datentyp ist SQL_C_CHAR oder SQL_C_BINARY.

Wenn StrLen_or_Ind für alle anderen Typen von C-Daten nicht SQL_NULL_DATA oder SQL_DEFAULT_PARAM ist, geht der Treiber davon aus, dass die Größe des *DataPtr-Puffers der Größe des mit ValueType oder TargetType angegebenen C-Datentyps entspricht, und sendet den gesamten Datenwert. Weitere Informationen finden Sie unter Konvertieren von Daten aus C in SQL-Datentypen in Anhang D: Datentypen.

Gibt zurück

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR oder SQL_INVALID_HANDLE.

Diagnose

Wenn SQLPutData SQL_ERROR oder SQL_SUCCESS_WITH_INFO zurückgibt, kann ein zugeordneter SQLSTATE-Wert abgerufen werden, indem SQLGetDiagRec mit einem HandleType von SQL_HANDLE_STMT und einem Handle von StatementHandle aufgerufen wird. In der folgenden Tabelle sind die SQLSTATE-Werte aufgeführt, die häufig von SQLPutData zurückgegeben werden, und die einzelnen Werte werden im Kontext dieser Funktion erläutert. die Notation "(DM)" steht vor den Beschreibungen von SQLSTATEs, die vom Treiber-Manager zurückgegeben werden. Der Rückgabecode, der jedem SQLSTATE-Wert zugeordnet ist, ist SQL_ERROR, sofern nicht anders angegeben.

SQLSTATE Fehler BESCHREIBUNG
01000 Allgemeine Warnung Treiberspezifische Informationsmeldung. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
01004 Zeichenfolgendaten, rechts abgeschnitten Zeichenfolgen- oder Binärdaten, die für einen Ausgabeparameter zurückgegeben wurden, führten zum Abschneiden von Binärdaten ohne oder ungleich NULL. Wenn es sich um einen Zeichenfolgenwert handelte, wurde er rechts abgeschnitten. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
07006 Verletzung des eingeschränkten Datentyp-Attributs Der durch das ValueType-Argument in SQLBindParameter für den gebundenen Parameter identifizierte Datenwert konnte nicht in den Datentyp konvertiert werden, der durch das ParameterType-Argument in SQLBindParameter identifiziert wird.
07S01 Ungültige Verwendung des Standardparameters Ein Parameterwert, der mit SQLBindParameter festgelegt wurde, wurde SQL_DEFAULT_PARAM, und der entsprechende Parameter verfügte nicht über einen Standardwert.
08S01 Kommunikationslinkfehler Die Kommunikationsverbindung zwischen dem Treiber und der Datenquelle, mit der der Treiber verbunden wurde, ist fehlgeschlagen, bevor die Verarbeitung der Funktion abgeschlossen wurde.
22001 Zeichenfolgendaten, rechtes Abschneiden Die Zuweisung eines Zeichens oder binärwerts zu einer Spalte führte zum Abschneiden von zeichen- oder nicht null(binären) Zeichen oder Bytes.

Der SQL_NEED_LONG_DATA_LEN Informationstyp in SQLGetInfo lautete "Y", und für einen long-Parameter wurden mehr Daten gesendet (der Datentyp war SQL_LONGVARCHAR, SQL_LONGVARBINARY oder ein langer datenquellenspezifischer Datentyp), als mit dem argument StrLen_or_IndPtr in SQLBindParameter angegeben wurde.

Der SQL_NEED_LONG_DATA_LEN Informationstyp in SQLGetInfo lautete "Y", und für eine lange Spalte wurden mehr Daten gesendet (der Datentyp war SQL_LONGVARCHAR, SQL_LONGVARBINARY oder ein langer Datenquellenspezifischer Datentyp), als im Längenpuffer angegeben wurde, der einer Spalte in einer Datenzeile entspricht, die mit SQLBulkOperations hinzugefügt oder aktualisiert oder mit SQLSetPos aktualisiert wurde.
22003 Numerischer Wert außerhalb des Bereichs Die für einen gebundenen numerischen Parameter oder eine spalte gesendeten Daten bewirkten, dass der gesamte Teil der Zahl (im Gegensatz zu Bruchzahlen) abgeschnitten wurde, wenn er der zugeordneten Tabellenspalte zugewiesen wurde.

Die Rückgabe eines numerischen Werts (als numerische oder Zeichenfolge) für einen oder mehrere Eingabe-/Ausgabe- oder Ausgabeparameter hätte dazu geführt, dass der gesamte Teil der Zahl (im Gegensatz zu Bruchteilen) der Zahl abgeschnitten wurde.
22007 Ungültiges datetime-Format Die Daten, die für einen Parameter oder eine Spalte gesendet wurden, die an eine Datums-, Uhrzeit- oder Zeitstempelstruktur gebunden waren, waren jeweils ein ungültiger Datums-, Uhrzeit- oder Zeitstempel.

Ein Eingabe-/Ausgabe- oder Ausgabeparameter wurde an eine Datums-, Uhrzeit- oder Zeitstempel-C-Struktur gebunden, und ein Wert im zurückgegebenen Parameter war ein ungültiger Datums-, Uhrzeit- oder Zeitstempel. (Funktion gibt SQL_SUCCESS_WITH_INFO zurück.)
22008 Datetime-Feldüberlauf Ein datetime-Ausdruck, der für einen Eingabe-/Ausgabe- oder Ausgabeparameter berechnet wurde, führte zu einer ungültigen Datums-, Uhrzeit- oder Zeitstempel-C-Struktur.
22012 Division durch 0 Ein arithmetischer Ausdruck, der für einen Eingabe-/Ausgabe- oder Ausgabeparameter berechnet wurde, führte zu einer Division durch null.
22015 Intervallfeldüberlauf Die Daten, die für eine genaue numerische oder Intervallspalte oder einen parameter an einen SQL-Datentyp für Intervall gesendet wurden, verursachten einen Verlust signifikanter Ziffern.

Daten wurden für eine Intervallspalte oder einen Parameter mit mehr als einem Feld gesendet, wurden in einen numerischen Datentyp konvertiert und hatten keine Darstellung im numerischen Datentyp.

Die für Spalten- oder Parameterdaten gesendeten Daten wurden einem SQL-Intervalltyp zugewiesen, und es gab keine Darstellung des Werts des Typs C im SQL-Typ interval.

Die Daten, die für eine genaue numerische oder Intervall-C-Spalte oder einen Parameter an einen Intervall-C-Typ gesendet wurden, verursachten einen Verlust signifikanter Ziffern.

Die für Spalten- oder Parameterdaten gesendeten Daten wurden einer Intervall-C-Struktur zugewiesen, und es gab keine Darstellung der Daten in der Intervalldatenstruktur.
22018 Ungültiger Zeichenwert für die Umwandlungsspezifikation Der C-Typ war ein genauer oder ungefährer numerischer Datentyp, ein datetime- oder ein Intervalldatentyp. Der SQL-Typ der Spalte war ein Zeichendatentyp; und der Wert in der Spalte oder dem Parameter war kein gültiges Literal des gebundenen C-Typs.

Der SQL-Typ war ein exakter oder ungefährer numerischer Datentyp, ein datetime- oder ein Intervalldatentyp. der Typ C wurde SQL_C_CHAR; und der Wert in der Spalte oder dem Parameter war kein gültiges Literal des gebundenen SQL-Typs.
HY000 Allgemeiner Fehler Es ist ein Fehler aufgetreten, für den kein spezifischer SQLSTATE-Wert vorhanden war und für den keine implementierungsspezifische SQLSTATE definiert wurde. Die von SQLGetDiagRec im *MessageText-Puffer zurückgegebene Fehlermeldung beschreibt den Fehler und seine Ursache.
HY001 Fehler bei der Speicherbelegung Der Treiber konnte keinen Arbeitsspeicher zuordnen, der für die Unterstützung der Ausführung oder Fertigstellung der Funktion erforderlich ist.
HY008 Vorgang abgebrochen Die asynchrone Verarbeitung wurde für statementHandle aktiviert. Die Funktion wurde aufgerufen, und vor Abschluss der Ausführung wurde SQLCancel oder SQLCancelHandle für statementHandle aufgerufen. Anschließend wurde die Funktion für die AnweisungHandle erneut aufgerufen.

Die Funktion wurde aufgerufen, und bevor die Ausführung abgeschlossen wurde, wurde SQLCancel oder SQLCancelHandle für die StatementHandle aus einem anderen Thread in einer Multithreadanwendung aufgerufen.
HY009 Ungültige Verwendung des NULL-Zeigers (DM) Das Argument DataPtr war ein NULL-Zeiger, und das Argument StrLen_or_Ind war nicht 0, SQL_DEFAULT_PARAM oder SQL_NULL_DATA.
HY010 Funktionssequenzfehler (DM) Der vorherige Funktionsaufruf war kein Aufruf von SQLPutData oder SQLParamData.

(DM) Eine asynchron ausgeführte Funktion wurde für das Verbindungshandle aufgerufen, das dem StatementHandle zugeordnet ist. Diese asynchrone Funktion wurde noch ausgeführt, als die FUNKTION SQLPutData aufgerufen wurde.

(DM) SQLExecute, SQLExecDirect oder SQLMoreResults wurde für statementHandle aufgerufen und SQL_PARAM_DATA_AVAILABLE zurückgegeben. Diese Funktion wurde aufgerufen, bevor Daten für alle gestreamten Parameter abgerufen wurden.

(DM) Eine asynchron ausgeführte Funktion (nicht diese) wurde für das StatementHandle aufgerufen und wurde noch ausgeführt, als diese Funktion aufgerufen wurde.
HY013 Fehler bei der Speicherverwaltung Der Funktionsaufruf konnte nicht verarbeitet werden, weil auf die zugrunde liegenden Speicherobjekte nicht zugegriffen werden konnte, möglicherweise aufgrund von geringen Arbeitsspeicherbedingungen.
HY019 Nicht-Zeichen- und Nicht-Binärdaten, die in Teilen gesendet werden SQLPutData wurde für einen Parameter oder eine Spalte mehrmals aufgerufen, und es wurde nicht verwendet, um Zeichen-C-Daten an eine Spalte mit einem zeichen-, binär- oder datenquellenspezifischen Datentyp zu senden oder um binäre C-Daten an eine Spalte mit einem zeichen-, binär- oder datenquellenspezifischen Datentyp zu senden.
HY020 Versuch, einen NULL-Wert zu verketten SQLPutData wurde seit dem Aufruf, der SQL_NEED_DATA zurückgegeben hat, mehrmals aufgerufen, und in einem dieser Aufrufe enthielt das argument StrLen_or_Ind SQL_NULL_DATA oder SQL_DEFAULT_PARAM.
HY090 Ungültige Zeichenfolgen- oder Pufferlänge Das Argument DataPtr war kein NULL-Zeiger, und das argument StrLen_or_Ind war kleiner als 0, aber nicht gleich SQL_NTS oder SQL_NULL_DATA.
HY117 Die Verbindung wird aufgrund eines unbekannten Transaktionsstatus angehalten. Nur trenn- und schreibgeschützte Funktionen sind zulässig. (DM) Weitere Informationen zum angehaltenen Zustand finden Sie unter SQLEndTran-Funktion.
HYT01 Verbindungstimeout abgelaufen Der Zeitraum für das Verbindungstimeout ist abgelaufen, bevor die Datenquelle auf die Anforderung geantwortet hat. Der Verbindungstimeoutzeitraum wird über SQLSetConnectAttr festgelegt, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Treiber unterstützt diese Funktion nicht. (DM) Der Der StatementHandle zugeordnete Treiber unterstützt die Funktion nicht.
IM017 Abruf ist im asynchronen Benachrichtigungsmodus deaktiviert. Wenn das Benachrichtigungsmodell verwendet wird, wird die Abfrage deaktiviert.
IM018 SQLCompleteAsync wurde nicht aufgerufen, um den vorherigen asynchronen Vorgang für dieses Handle abzuschließen. Wenn der vorherige Funktionsaufruf für das Handle SQL_STILL_EXECUTING zurückgibt und der Benachrichtigungsmodus aktiviert ist, muss SQLCompleteAsync für das Handle aufgerufen werden, um die Nachverarbeitung durchzuführen und den Vorgang abzuschließen.

Wenn SQLPutData aufgerufen wird, während Daten für einen Parameter in einer SQL-Anweisung gesendet werden, kann ein beliebiger SQLSTATE-Wert zurückgegeben werden, der von der Funktion zurückgegeben werden kann, die zum Ausführen der Anweisung aufgerufen wird (SQLExecute oder SQLExecDirect). Wenn es aufgerufen wird, während Daten für eine Spalte gesendet werden, die mit SQLBulkOperations aktualisiert oder hinzugefügt wird oder mit SQLSetPos aktualisiert wird, kann ein beliebiger SQLSTATE-Wert zurückgegeben werden, der von SQLBulkOperations oder SQLSetPos zurückgegeben werden kann.

Kommentare

SQLPutData kann aufgerufen werden, um Daten bei der Ausführung für zwei Zwecke bereitzustellen: Parameterdaten, die in einem Aufruf von SQLExecute oder SQLExecDirect verwendet werden sollen, oder Spaltendaten, die verwendet werden, wenn eine Zeile durch einen Aufruf von SQLBulkOperations aktualisiert oder hinzugefügt wird oder durch einen Aufruf von SQLSetPos aktualisiert wird.

Wenn eine Anwendung SQLParamData aufruft, um zu bestimmen, welche Daten gesendet werden sollen, gibt der Treiber einen Indikator zurück, mit dem die Anwendung bestimmen kann, welche Parameterdaten gesendet werden sollen oder wo Spaltendaten gefunden werden können. Außerdem wird SQL_NEED_DATA zurückgegeben. Dies ist ein Indikator für die Anwendung, dass sqlPutData aufgerufen werden soll, um die Daten zu senden. Im Argument DataPtr an SQLPutData übergibt die Anwendung einen Zeiger an den Puffer, der die tatsächlichen Daten für den Parameter oder die Spalte enthält.

Wenn der Treiber SQL_SUCCESS für SQLPutData zurückgibt, ruft die Anwendung SQLParamData erneut auf. SQLParamData gibt SQL_NEED_DATA zurück, wenn mehr Daten gesendet werden müssen. In diesem Fall ruft die Anwendung SQLPutData erneut auf. Es wird SQL_SUCCESS zurückgegeben, wenn alle Daten bei der Ausführung gesendet wurden. Anschließend ruft die Anwendung SQLParamData erneut auf. Wenn der Treiber SQL_NEED_DATA und einen anderen Indikator in *ValuePtrPtrPtr zurückgibt, benötigt er Daten für einen anderen Parameter oder eine andere Spalte, und SQLPutData wird erneut aufgerufen. Wenn der Treiber SQL_SUCCESS zurückgibt, wurden alle Daten bei der Ausführung gesendet, und die SQL-Anweisung kann ausgeführt oder der SQLBulkOperations - oder SQLSetPos-Aufruf verarbeitet werden.

Weitere Informationen dazu, wie Daten bei Ausführungsparameterdaten zur Ausführungszeit der Anweisung übergeben werden, finden Sie unter "Übergeben von Parameterwerten" in SQLBindParameter und Senden von langen Daten. Weitere Informationen dazu, wie Daten bei der Ausführungsspalte aktualisiert oder hinzugefügt werden, finden Sie im Abschnitt "Using SQLSetPos" in SQLSetPos, "Performing Bulk Aktualisierungen Using Bookmarks" in SQLBulkOperations und Long Data and SQLSetPos and SQLBulkOperations.

Hinweis

Eine Anwendung kann SQLPutData zum Senden von Daten in Teilen nur beim Senden von Zeichen-C-Daten an eine Spalte mit einem zeichen-, binär- oder datenquellenspezifischen Datentyp oder beim Senden von C-Binärdaten an eine Spalte mit einem zeichen-, binär- oder datenquellenspezifischen Datentyp verwenden. Wenn SQLPutData unter anderen Bedingungen mehr als einmal aufgerufen wird, werden SQL_ERROR und SQLSTATE HY019 (in Teilen gesendete Nicht-Zeichen- und Nicht-Binärdaten) zurückgegeben.

Beispiel

Im folgenden Beispiel wird von einem Datenquellennamen namens Test ausgegangen. Die zugeordnete Datenbank sollte über eine Tabelle verfügen, die Sie wie folgt erstellen können:

CREATE TABLE emp4 (NAME char(30), AGE int, BIRTHDAY datetime, Memo1 text)  
// SQLPutData.cpp  
// compile with: odbc32.lib user32.lib  
#include <stdio.h>  
#include <windows.h>  
#include <sqlext.h>  
#include <odbcss.h>  
  
#define TEXTSIZE  12000  
#define MAXBUFLEN 256  
  
SQLHENV henv = SQL_NULL_HENV;  
SQLHDBC hdbc1 = SQL_NULL_HDBC;       
SQLHSTMT hstmt1 = SQL_NULL_HSTMT;  
  
void Cleanup() {  
   if (hstmt1 != SQL_NULL_HSTMT)  
      SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);  
  
   if (hdbc1 != SQL_NULL_HDBC) {  
      SQLDisconnect(hdbc1);  
      SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);  
   }  
  
   if (henv != SQL_NULL_HENV)  
      SQLFreeHandle(SQL_HANDLE_ENV, henv);  
}  
  
int main() {  
   RETCODE retcode;  
  
   // SQLBindParameter variables.  
   SQLLEN cbTextSize, lbytes;  
  
   // SQLParamData variable.  
   PTR pParmID;  
  
   // SQLPutData variables.  
   UCHAR  Data[] =   
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz"  
      "abcdefghijklmnopqrstuvwxyz";  
  
   SDWORD cbBatch = (SDWORD)sizeof(Data) - 1;  
  
   // Allocate the ODBC environment and save handle.  
   retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLAllocHandle(Env) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Notify ODBC that this is an ODBC 3.0 app.  
   retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLSetEnvAttr(ODBC version) Failed\n\n");  
      Cleanup();  
      return(9);      
   }  
  
   // Allocate ODBC connection handle and connect.  
   retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1);  
   if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) {  
      printf("SQLAllocHandle(hdbc1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Sample uses Integrated Security, create SQL Server DSN using Windows NT authentication.   
   retcode = SQLConnect(hdbc1, (UCHAR*)"Test", SQL_NTS, (UCHAR*)"",SQL_NTS, (UCHAR*)"", SQL_NTS);  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("SQLConnect() Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Allocate statement handle.  
   retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("SQLAllocHandle(hstmt1) Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Set parameters based on total data to send.  
   lbytes = (SDWORD)TEXTSIZE;  
   cbTextSize = SQL_LEN_DATA_AT_EXEC(lbytes);  
  
   // Bind the parameter marker.  
   retcode = SQLBindParameter (hstmt1,           // hstmt  
                               1,                // ipar  
                               SQL_PARAM_INPUT,  // fParamType  
                               SQL_C_CHAR,       // fCType  
                               SQL_LONGVARCHAR,  // FSqlType  
                               lbytes,           // cbColDef  
                               0,                // ibScale  
                               (VOID *)1,        // rgbValue  
                               0,                // cbValueMax  
                               &cbTextSize);     // pcbValue  
  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("SQLBindParameter Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Execute the command.  
   retcode =   
      SQLExecDirect(hstmt1, (UCHAR*)"INSERT INTO emp4 VALUES('Paul Borm', 46,'1950-11-12 00:00:00', ?)", SQL_NTS);  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_NEED_DATA) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("SQLExecDirect Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Check to see if NEED_DATA; if yes, use SQLPutData.  
   retcode = SQLParamData(hstmt1, &pParmID);  
   if (retcode == SQL_NEED_DATA) {  
      while (lbytes > cbBatch) {  
         SQLPutData(hstmt1, Data, cbBatch);  
         lbytes -= cbBatch;  
      }  
      // Put final batch.  
      retcode = SQLPutData(hstmt1, Data, lbytes);   
   }  
  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("SQLParamData Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Make final SQLParamData call.  
   retcode = SQLParamData(hstmt1, &pParmID);  
   if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {  
      printf("Final SQLParamData Failed\n\n");  
      Cleanup();  
      return(9);  
   }  
  
   // Clean up.  
   SQLFreeHandle(SQL_HANDLE_STMT, hstmt1);  
   SQLDisconnect(hdbc1);  
   SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);  
   SQLFreeHandle(SQL_HANDLE_ENV, henv);  
}  
Informationen über Finden Sie unter
Binden eines Puffers an einen Parameter SQLBindParameter-Funktion
Abbrechen der Anweisungsverarbeitung SQLCancel-Funktion
Ausführen einer SQL-Anweisung SQLExecDirect-Funktion
Ausführen einer vorbereiteten SQL-Anweisung SQLExecute-Funktion
Zurückgeben des nächsten Parameters zum Senden von Daten für SQLParamData-Funktion

Weitere Informationen

ODBC-API-Referenz
ODBC-Headerdateien