Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le fournisseur OLE DB SQL Server Native Client expose la fonction ITableDefinition ::CreateTable , ce qui permet aux consommateurs de créer des tables SQL Server. Les consommateurs utilisent CreateTable pour créer des tables permanentes nommées par le consommateur et des tables permanentes ou temporaires avec des noms uniques générés par le fournisseur OLE DB SQL Server Native Client.
Lorsque le consommateur appelle ITableDefinition ::CreateTable, si la valeur de la propriété DBPROP_TBL_TEMPTABLE est VARIANT_TRUE, le fournisseur OLE DB SQL Server Native Client génère un nom de table temporaire pour le consommateur. Le consommateur définit le paramètre pTableID de la méthode CreateTable sur NULL. Les tables temporaires avec des noms générés par le fournisseur OLE DB SQL Server Native Client n’apparaissent pas dans l’ensemble de lignes TABLES , mais sont accessibles via l’interface IOpenRowset .
Lorsque les consommateurs spécifient le nom de la table dans le membre pwszName de l’union uName dans le paramètre pTableID , le fournisseur OLE DB SQL Server Native Client crée une table SQL Server avec ce nom. Les contraintes d’affectation de noms de table SQL Server s’appliquent, et le nom de la table peut indiquer une table permanente, ou une table locale ou globale temporaire. Pour plus d’informations, consultez CREATE TABLE. Le paramètre ppTableID peut être NULL.
Le fournisseur OLE DB SQL Server Native Client peut générer les noms des tables permanentes ou temporaires. Lorsque le consommateur définit le paramètre pTableID sur NULL et définit ppTableID pour qu’il pointe vers un DBID valide*, le fournisseur OLE DB SQL Server Native Client retourne le nom généré de la table dans le membre pwszName de l’union uName du DBID pointé par la valeur ppTableID. Pour créer une table nommée fournisseur OLE DB SQL Server Native Client temporaire, le consommateur inclut la propriété de table OLE DB DBPROP_TBL_TEMPTABLE dans un jeu de propriétés de table référencé dans le paramètre rgPropertySets . Les tables temporaires nommées par le fournisseur OLE DB SQL Server Native Client sont locales.
CreateTable retourne DB_E_BADTABLEID si le membre eKind du paramètre pTableID n’indique pas DBKIND_NAME.
Utilisation de DBCOLUMNDESC
Le consommateur peut indiquer un type de données de colonne à l’aide du membre pwszTypeName ou du membre wType . Si le consommateur spécifie le type de données dans pwszTypeName, le fournisseur OLE DB SQL Server Native Client ignore la valeur de wType.
Si vous utilisez le membre pwszTypeName , le consommateur spécifie le type de données à l’aide des noms de types de données SQL Server. Les noms de type de données valides sont ceux retournés dans la colonne TYPE_NAME de l’ensemble de lignes de schéma PROVIDER_TYPES.
Le fournisseur OLE DB SQL Server Native Client reconnaît un sous-ensemble de valeurs DBTYPE énumérées par OLE DB dans le membre wType . Pour plus d’informations, consultez Mappage de type de données dans ITableDefinition.
Remarque
CreateTable retourne DB_E_BADTYPE si le consommateur définit le membre pTypeInfo ou pclsid pour spécifier le type de données de colonne.
Le consommateur spécifie le nom de colonne dans le membre pwszName de l’union uName du membre dbCOLUMNDESC dbcid . Le nom de colonne est spécifié en tant que chaîne de caractères Unicode. Le membre eKind de dbcid doit être DBKIND_NAME. CreateTable retourne DB_E_BADCOLUMNID si eKind n’est pas valide, pwszName a la valeur NULL ou si la valeur de pwszName n’est pas un identificateur SQL Server valide.
Toutes les propriétés de colonne sont disponibles sur toutes les colonnes définies pour la table. CreateTable peut retourner DB_S_ERRORSOCCURRED ou DB_E_ERRORSOCCURRED si les valeurs de propriété sont définies en conflit. CreateTable retourne une erreur lorsque les paramètres de propriété de colonne non valides provoquent un échec de création de table SQL Server.
Les propriétés de colonne d’un DBCOLUMNDESC sont interprétées comme suit.
| ID de propriété | Descriptif |
|---|---|
| DBPROP_COL_AUTOINCREMENT | R/W : lecture/écriture Valeur par défaut : VARIANT_FALSE Description : définit la propriété d’identité sur la colonne créée. Pour SQL Server, la propriété d’identité est valide pour une seule colonne dans une table. La définition de la propriété sur VARIANT_TRUE pour plusieurs colonnes génère une erreur lorsque le fournisseur OLE DB SQL Server Native Client tente de créer la table sur le serveur. La propriété d’identité SQL Server est valide uniquement pour les types entier, numérique et décimal lorsque l’échelle est 0. La définition de la propriété sur VARIANT_TRUE sur une colonne d’un autre type de données génère une erreur lorsque le fournisseur OLE DB SQL Server Native Client tente de créer la table sur le serveur. Le fournisseur OLE DB SQL Server Native Client retourne DB_S_ERRORSOCCURRED lorsque DBPROP_COL_AUTOINCREMENT et DBPROP_COL_NULLABLE sont à la fois VARIANT_TRUE et que l’option dwOption de DBPROP_COL_NULLABLE n’est pas DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED est retourné lorsque DBPROP_COL_AUTOINCREMENT et DBPROP_COL_NULLABLE sont VARIANT_TRUE et que l’option dwOption de DBPROP_COL_NULLABLE est égale à DBPROPOPTIONS_REQUIRED. La colonne est définie avec la propriété d’identité SQL Server et le membre DBPROP_COL_NULLABLE dwStatus est défini sur DBPROPSTATUS_CONFLICTING. |
| DBPROP_COL_DEFAULT | R/W : lecture/écriture Valeur par défaut : Aucun Description : crée une contrainte SQL Server DEFAULT pour la colonne. Le membre vValue DBPROP peut être l’un des types. Le membre vValue.vt doit spécifier un type compatible avec le type de données de la colonne. Par exemple, la définition de BSTR N/A comme valeur par défaut pour une colonne définie comme DBTYPE_WSTR est une correspondance compatible. La définition de la même valeur par défaut sur une colonne définie comme DBTYPE_R8 génère une erreur lorsque le fournisseur OLE DB SQL Server Native Client tente de créer la table sur le serveur. |
| DBPROP_COL_DESCRIPTION | R/W : lecture/écriture Valeur par défaut : Aucun Description : la propriété de colonne DBPROP_COL_DESCRIPTION n’est pas implémentée par le fournisseur OLE DB SQL Server Native Client. Le membre dwStatus de la structure DBPROP retourne DBPROPSTATUS_NOTSUPPORTED lorsque le consommateur tente d’écrire la valeur de propriété. La définition de la propriété ne constitue pas une erreur irrécupérable pour le fournisseur OLE DB SQL Server Native Client. Si toutes les autres valeurs de paramètre sont valides, la table SQL Server est créée. |
| DBPROP_COL_FIXEDLENGTH | R/W : lecture/écriture Par défaut : VARIANT_FALSE Description : le fournisseur OLE DB SQL Server Native Client utilise DBPROP_COL_FIXEDLENGTH pour déterminer le mappage de type de données lorsque le consommateur définit le type de données d’une colonne à l’aide du membre wType de DBCOLUMNDESC. Pour plus d’informations, consultez Mappage de type de données dans ITableDefinition. |
| DBPROP_COL_NULLABLE | R/W : lecture/écriture Valeur par défaut : Aucun Description : lors de la création de la table, le fournisseur OLE DB SQL Server Native Client indique si la colonne doit accepter des valeurs Null si la propriété est définie. Lorsque la propriété n’est pas définie, la capacité de la colonne à accepter NULL comme valeur est déterminée par l’option de base de données par défaut de SQL Server ANSI_NULLS. Le fournisseur OLE DB SQL Server Native Client est un fournisseur conforme à la norme ISO. Les sessions connectées présentent des comportements ISO. Si le consommateur ne définit pas DBPROP_COL_NULLABLE, les colonnes acceptent les valeurs Null. |
| DBPROP_COL_PRIMARYKEY | R/W : lecture/écriture Valeur par défaut : VARIANT_FALSE Description : quand VARIANT_TRUE, le fournisseur OLE DB SQL Server Native Client crée la colonne avec une contrainte PRIMARY KEY. Lorsqu’elle est définie en tant que propriété de colonne, une seule colonne peut déterminer la contrainte. La définition de la propriété VARIANT_TRUE pour plusieurs colonnes renvoie une erreur lorsque le fournisseur OLE DB SQL Server Native Client tente de créer la table SQL Server. Remarque : le consommateur peut utiliser IIndexDefinition ::CreateIndex pour créer une contrainte PRIMARY KEY sur deux colonnes ou plus. Le fournisseur OLE DB SQL Server Native Client retourne DB_S_ERRORSOCCURRED lorsque DBPROP_COL_PRIMARYKEY et DBPROP_COL_UNIQUE sont à la fois VARIANT_TRUE et que l’option dwOption de DBPROP_COL_UNIQUE n’est pas DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED est retourné lorsque DBPROP_COL_PRIMARYKEY et DBPROP_COL_UNIQUE sont VARIANT_TRUE et que l’option dwOption de DBPROP_COL_UNIQUE est égale à DBPROPOPTIONS_REQUIRED. La colonne est définie avec la propriété d’identité SQL Server et le membre DBPROP_COL_PRIMARYKEY dwStatus est défini sur DBPROPSTATUS_CONFLICTING. Le fournisseur OLE DB SQL Server Native Client retourne une erreur lorsque DBPROP_COL_PRIMARYKEY et DBPROP_COL_NULLABLE sont tous les deux VARIANT_TRUE. Le fournisseur OLE DB SQL Server Native Client retourne une erreur de SQL Server lorsque le consommateur tente de créer une contrainte PRIMARY KEY sur une colonne de type de données SQL Server non valide. Les contraintes PRIMARY KEY ne peuvent pas être définies sur les colonnes créées avec les types de données SQL Server bit, text, ntext et image. |
| DBPROP_COL_UNIQUE | R/W : lecture/écriture Valeur par défaut : VARIANT_FALSE Description : applique une contrainte UNIQUE SQL Server à la colonne. Lorsqu’elle est définie en tant que propriété de colonne, la contrainte est appliquée à une seule colonne uniquement. Le consommateur peut utiliser IIndexDefinition ::CreateIndex pour appliquer une contrainte UNIQUE aux valeurs combinées de deux colonnes ou plus. Le fournisseur OLE DB SQL Server Native Client retourne DB_S_ERRORSOCCURRED lorsque DBPROP_COL_PRIMARYKEY et DBPROP_COL_UNIQUE sont à la fois VARIANT_TRUE et que dwOption n’est pas DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED est retourné lorsque DBPROP_COL_PRIMARYKEY et DBPROP_COL_UNIQUE sont VARIANT_TRUE et dwOption est égal à DBPROPOPTIONS_REQUIRED. La colonne est définie avec la propriété d’identité SQL Server et le membre DBPROP_COL_PRIMARYKEY dwStatus est défini sur DBPROPSTATUS_CONFLICTING. Le fournisseur OLE DB SQL Server Native Client retourne DB_S_ERRORSOCCURRED lorsque DBPROP_COL_NULLABLE et DBPROP_COL_UNIQUE sont tous les deux VARIANT_TRUE et dwOption n’est pas DBPROPOPTIONS_REQUIRED. DB_E_ERRORSOCCURRED est retourné lorsque DBPROP_COL_NULLABLE et DBPROP_COL_UNIQUE sont tous les deux VARIANT_TRUE et dwOption est égal à DBPROPOPTIONS_REQUIRED. La colonne est définie avec la propriété d’identité SQL Server et le membre DBPROP_COL_NULLABLE dwStatus est défini sur DBPROPSTATUS_CONFLICTING. Le fournisseur OLE DB SQL Server Native Client retourne une erreur de SQL Server lorsque le consommateur tente de créer une contrainte UNIQUE sur une colonne de type de données SQL Server non valide. Les contraintes UNIQUES ne peuvent pas être définies sur les colonnes créées avec le type de données bit SQL Server. |
Lorsque le consommateur appelle ITableDefinition ::CreateTable, le fournisseur OLE DB SQL Server Native Client interprète les propriétés de table comme suit.
| ID de propriété | Descriptif |
|---|---|
| DBPROP_TBL_TEMPTABLE | R/W : lecture/écriture Valeur par défaut : VARIANT_FALSE Description : par défaut, le fournisseur OLE DB SQL Server Native Client crée des tables nommées par le consommateur. Quand VARIANT_TRUE, le fournisseur OLE DB SQL Server Native Client génère un nom de table temporaire pour le consommateur. Le consommateur définit le paramètre pTableID de CreateTable sur NULL. Le paramètre ppTableID doit contenir un pointeur valide. |
Si le consommateur demande qu’un ensemble de lignes soit ouvert sur une table créée avec succès, le fournisseur OLE DB SQL Server Native Client ouvre un ensemble de lignes pris en charge par le curseur. Toutes les propriétés d’ensemble de lignes peuvent être indiquées dans les jeux de propriétés passés.
Cet exemple crée une table SQL Server.
// This CREATE TABLE statement shows the details of the table created by
// the following example code.
//
// CREATE TABLE OrderDetails
// (
// OrderID int NOT NULL
// ProductID int NOT NULL
// CONSTRAINT PK_OrderDetails
// PRIMARY KEY CLUSTERED (OrderID, ProductID),
// UnitPrice money NOT NULL,
// Quantity int NOT NULL,
// Discount decimal(2,2) NOT NULL
// DEFAULT 0
// )
//
// The PRIMARY KEY constraint is created in an additional example.
HRESULT CreateTable
(
ITableDefinition* pITableDefinition
)
{
DBID dbidTable;
const ULONG nCols = 5;
ULONG nCol;
ULONG nProp;
DBCOLUMNDESC dbcoldesc[nCols];
HRESULT hr;
// Set up column descriptions. First, set default property values for
// the columns.
for (nCol = 0; nCol < nCols; nCol++)
{
dbcoldesc[nCol].pwszTypeName = NULL;
dbcoldesc[nCol].pTypeInfo = NULL;
dbcoldesc[nCol].rgPropertySets = new DBPROPSET;
dbcoldesc[nCol].pclsid = NULL;
dbcoldesc[nCol].cPropertySets = 1;
dbcoldesc[nCol].ulColumnSize = 0;
dbcoldesc[nCol].dbcid.eKind = DBKIND_NAME;
dbcoldesc[nCol].wType = DBTYPE_I4;
dbcoldesc[nCol].bPrecision = 0;
dbcoldesc[nCol].bScale = 0;
dbcoldesc[nCol].rgPropertySets[0].rgProperties =
new DBPROP[NCOLPROPS_MAX];
dbcoldesc[nCol].rgPropertySets[0].cProperties = NCOLPROPS_MAX;
dbcoldesc[nCol].rgPropertySets[0].guidPropertySet =
DBPROPSET_COLUMN;
for (nProp = 0; nProp < NCOLPROPS_MAX; nProp++)
{
dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
dwOptions = DBPROPOPTIONS_REQUIRED;
dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].colid
= DB_NULLID;
VariantInit(
&(dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
vValue));
dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
vValue.vt = VT_BOOL;
}
}
// Set the column-specific information.
dbcoldesc[0].dbcid.uName.pwszName = L"OrderID";
dbcoldesc[0].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[0].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[0].rgPropertySets[0].cProperties = 1;
dbcoldesc[1].dbcid.uName.pwszName = L"ProductID";
dbcoldesc[1].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[1].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[1].rgPropertySets[0].cProperties = 1;
dbcoldesc[2].dbcid.uName.pwszName = L"UnitPrice";
dbcoldesc[2].wType = DBTYPE_CY;
dbcoldesc[2].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[2].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[2].rgPropertySets[0].cProperties = 1;
dbcoldesc[3].dbcid.uName.pwszName = L"Quantity";
dbcoldesc[3].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[3].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[3].rgPropertySets[0].cProperties = 1;
dbcoldesc[4].dbcid.uName.pwszName = L"Discount";
dbcoldesc[4].wType = DBTYPE_NUMERIC;
dbcoldesc[4].bPrecision = 2;
dbcoldesc[4].bScale = 2;
dbcoldesc[4].rgPropertySets[0].rgProperties[0].dwPropertyID =
DBPROP_COL_NULLABLE;
dbcoldesc[4].rgPropertySets[0].rgProperties[0].vValue.boolVal =
VARIANT_FALSE;
dbcoldesc[4].rgPropertySets[0].rgProperties[1].dwPropertyID =
DBPROP_COL_DEFAULT;
dbcoldesc[4].rgPropertySets[0].rgProperties[1].vValue.vt = VT_BSTR;
dbcoldesc[4].rgPropertySets[0].rgProperties[1].vValue.bstrVal =
SysAllocString(L"0");
dbcoldesc[4].rgPropertySets[0].cProperties = 2;
// Set up the dbid for OrderDetails.
dbidTable.eKind = DBKIND_NAME;
dbidTable.uName.pwszName = L"OrderDetails";
if (FAILED(hr = pITableDefinition->CreateTable(NULL, &dbidTable,
nCols, dbcoldesc, NULL, 0, NULL, NULL, NULL)))
{
DumpError(pITableDefinition, IID_ITableDefinition);
goto SAFE_EXIT;
}
SAFE_EXIT:
// Clean up dynamic allocation in the property sets.
for (nCol = 0; nCol < nCols; nCol++)
{
for (nProp = 0; nProp < NCOLPROPS_MAX; nProp++)
{
if (dbcoldesc[nCol].rgPropertySets[0].rgProperties[nProp].
vValue.vt == VT_BSTR)
{
SysFreeString(dbcoldesc[nCol].rgPropertySets[0].
rgProperties[nProp].vValue.bstrVal);
}
}
delete [] dbcoldesc[nCol].rgPropertySets[0].rgProperties;
delete [] dbcoldesc[nCol].rgPropertySets;
}
return (hr);
}