Rowset Creation Example

OLE DB Programmer's Reference

The code in this example shows how to create a rowset.

///////////////////////////////////////////////////////////////// // myCreateRowset // // This function creates an OLE DB rowset object from the given // provider's session object. It first obtains a default table // name from the user through the tables schema rowset, if // supported, and then creates a rowset object by one of two methods: // // - If the user requested that the rowset object be created //    from a command object, it creates a command object and then //    obtains command text from the user, sets properties and //    the command text, and finally executes the command to //    create the rowset object. // - Otherwise, the function obtains a table name from the user //    and calls IOpenRowset::OpenRowset to create a rowset object //    over that table that supports the requested properties. // ///////////////////////////////////////////////////////////////// HRESULT   myCreateRowset    (    IUnknown *           pUnkSession,    IUnknown **          ppUnkRowset    ) {    HRESULT              hr;    IUnknown *           pUnkCommand                      = NULL;    IOpenRowset *        pIOpenRowset                     = NULL;    WCHAR                wszTableName[MAX_NAME_LEN + 1]   = {0};    const ULONG          cProperties                      = 2;    DBPROP               rgProperties[cProperties];    DBPROPSET            rgPropSets[1];    // Obtain a default table name from the user by displaying the    // tables schema rowset if schema rowsets are supported.    CHECK_HR(hr = myCreateSchemaRowset(DBSCHEMA_TABLES, pUnkSession,             MAX_NAME_LEN, wszTableName));    // Set properties on the rowset, to request additional functionality.    myAddRowsetProperties(rgPropSets, cProperties, rgProperties);    // If the user requested that the rowset be created from a    // command object, create a command, set its properties and    // text, and execute it to create the rowset object.    if( g_dwFlags & USE_COMMAND )    {       WCHAR      wszCommandText[MAX_NAME_LEN + 1];       // Attempt to create the command object from the provider's       // session object. Note that commands are not supported by       // all providers, and this will fail in that case.       CHECK_HR(hr = myCreateCommand(pUnkSession, &pUnkCommand));              // Get the command text that we will execute from the user.       if( !myGetInputFromUser(wszCommandText, L"\nType the command "          L"to execute [Enter = `select * from %s`]: ", wszTableName) )       {          swprintf(wszCommandText, L"select * from %s", wszTableName);       }       // And execute the command the user entered.       CHECK_HR(hr = myExecuteCommand(pUnkCommand, wszCommandText,                1, rgPropSets, ppUnkRowset));    }    // Otherwise, the user gets the default behavior, which is to use    // IOpenRowset to create the rowset object from the session object.    // IOpenRowset is supported by all providers; it takes a TableID    // and creates a rowset containing all rows in that table. It is    // similar to using SQL command text of "SELECT * FROM TableID".    else    {       DBID         TableID;       // Create the TableID.       TableID.eKind            = DBKIND_NAME;       TableID.uName.pwszName   = wszTableName;       // Obtain the table name from the user.       myGetInputFromUser(wszTableName, L"\nType the name of the table "          L"to use [Enter = `%s`]: ", wszTableName);       // Get the IOpenRowset interface, and create a rowset object       // over the requested table through OpenRowset.       XCHECK_HR(hr = pUnkSession->QueryInterface(                 IID_IOpenRowset, (void**)&pIOpenRowset));       XCHECK_HR(hr = pIOpenRowset->OpenRowset(                 NULL,            // pUnkOuter                 &TableID,        // pTableID                 NULL,            // pIndexID                 IID_IRowset,     // riid                 1,               // cPropSets                 rgPropSets,      // rgPropSets                 ppUnkRowset));   // ppRowset    } CLEANUP:    if( pIOpenRowset )       pIOpenRowset->Release();    if( pUnkCommand )       pUnkCommand->Release();    return hr; }

1998-2001 Microsoft Corporation. All rights reserved.



Microsoft Ole Db 2.0 Programmer's Reference and Data Access SDK
Microsoft OLE DB 2.0 Programmers Reference and Data Access SDK (Microsoft Professional Editions)
ISBN: 0735605904
EAN: 2147483647
Year: 1998
Pages: 1083

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net