Share via


Zuordnen von Datentypen (ODBC)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Der SQL Server Native Client ODBC-Treiber ordnet SQL Server SQL-Datentypen ODBC-Datentypen zu. In den folgenden Abschnitten werden die SQL Server SQL-Datentypen und die ODBC SQL-Datentypen erläutert, denen sie zugeordnet sind. Außerdem werden die ODBC-SQL-Datentypen und die zugehörigen ODBC-C-Datentypen sowie die unterstützten und standardmäßigen Konvertierungen erklärt.

Hinweis

Der SQL Server-Zeitstempel-Datentyp ist dem SQL_BINARY- oder SQL_VARBINARY ODBC-Datentyp zugeordnet, da die Werte in Zeitstempelspalten keine Datumstimewerte sind, sondern binäre(8) oder varbinary(8)-Werte, die die Abfolge der SQL Server-Aktivität in der Zeile angeben. Wenn der ODBC-Treiber des nativen SQL Server-Clients einen SQL_C_WCHAR (Unicode)-Wert findet, der eine ungerade Anzahl von Bytes darstellt, wird das nachfolgende ungerade Byte abgeschnitten.

Arbeiten mit dem 'sql_variant'-Datentyp in ODBC

Die Sql_variant-Datentypspalte kann jeden der Datentypen in SQL Server enthalten, mit Ausnahme großer Objekte (LOBs), z . B. Text, ntext und Bild. Die Spalte kann z. B. kleine Werte für einige Zeilen, Gleitkommawerte für andere Zeilen und Char/nchar-Werte im Re Standard der enthalten.

Der datentyp sql_variant ähnelt dem Datentyp Variant in Visual Basic.

Abrufen von Daten vom Server

ODBC verfügt nicht über ein Konzept von Variantentypen, schränkt die Verwendung des sql_variant Datentyps mit einem ODBC-Treiber in SQL Server ein. Wenn eine Bindung angegeben ist, muss der datentyp sql_variant in SQL Server an einen der dokumentierten ODBC-Datentypen gebunden werden. SQL_CA_SS_VARIANT_TYPE gibt ein neues Attribut, das für den ODBC-Treiber des nativen SQL Server-Clients spezifisch ist, den Datentyp einer Instanz in der Spalte sql_variant an den Benutzer zurück.

Wenn keine Bindung angegeben ist, kann die SQLGetData-Funktion verwendet werden, um den Datentyp einer Instanz in der spalte sql_variant zu bestimmen.

Führen Sie die folgenden Schritte aus, um sql_variant Daten abzurufen.

  1. Rufen Sie SQLFetch auf, um die abgerufene Zeile zu positionieren.

  2. Rufen Sie SQLGetData auf, und geben Sie SQL_C_BINARY für den Typ und 0 für die Datenlänge an. Dadurch wird der Treiber gezwungen, die sql_variant Kopfzeile zu lesen. Die Kopfzeile stellt den Datentyp dieser Instanz in der spalte sql_variant bereit. SQLGetData gibt die Größe (in Bytes) des Werts zurück.

  3. Rufen Sie SQLColAttribute auf, indem Sie SQL_CA_SS_VARIANT_TYPE als Attributwert angeben. Diese Funktion gibt den C-Datentyp der Instanz in der Spalte sql_variant an den Client zurück.

Im folgenden Codesegment werden die vorhergehenden Schritte gezeigt.

while ((retcode = SQLFetch (hstmt))==SQL_SUCCESS)  
{  
    if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO)  
    {  
        SQLError (NULL, NULL, hstmt, NULL,   
                    &lNativeError,szError,MAX_DATA,&sReturned);  
        printf_s ("%s\n",szError);  
        goto Exit;  
    }  
    retcode = SQLGetData (hstmt, 1, SQL_C_BINARY,   
                                pBuff,0,&Indicator);//Figure out the length  
    if (retcode != SQL_SUCCESS_WITH_INFO && retcode != SQL_SUCCESS)  
    {  
        SQLError (NULL, NULL, hstmt, NULL, &lNativeError,   
                    szError,MAX_DATA,&sReturned);  
        printf_s ("%s\n",szError);  
        goto Exit;  
    }  
    printf_s ("Byte length : %d ",Indicator); //Print out the byte length  
  
    int iValue = 0;  
    retcode = SQLColAttribute (hstmt, 1, SQL_CA_SS_VARIANT_TYPE, NULL,   
                                        NULL,NULL,&iValue);  //Figure out the type  
    printf_s ("Sub type = %d ",iValue);//Print the type, the return is C_type of the column]  
  
// Set up a new binding or do the SQLGetData on that column with   
// the appropriate type  
}  

Wenn der Benutzer die Bindung mit SQLBindCol erstellt, liest der Treiber die Metadaten und die Daten. Der Treiber konvertiert die Daten dann in den entsprechenden in der Bindung angegebenen ODBC-Typ.

Senden von Daten an den Server

SQL_SS_VARIANT wird ein neuer Datentyp, der für den SQL Server Native Client ODBC-Treiber spezifisch ist, für Daten verwendet, die an eine sql_variant Spalte gesendet werden. Beim Senden von Daten an den Server mithilfe von Parametern (z. B. INSERT INTO TableName VALUES (?,?)) wird SQLBindParameter verwendet, um die Parameterinformationen einschließlich des C-Typs und des entsprechenden SQL Server-Typs anzugeben. Der SQL Server Native Client ODBC-Treiber konvertiert den C-Datentyp in einen der entsprechenden sql_variant Untertypen.

Weitere Informationen

Verarbeiten von Ergebnissen (ODBC)