OLE DB セッション オブジェクト (SQL Server Compact)

セッション オブジェクトは主に、トランザクション、コマンド、行セットを定義するとき、およびテーブル、インデックスを作成、編集するときに使用します。

セッション オブジェクトの使用

MicrosoftSQL Server Compact 3.5 では、ISessionPropertiesインターフェイスを使用してセッション プロパティを設定できます。

セッションからは、次の操作を行うことができます。

  • コマンド オブジェクトの作成 (IDBCreateCommand::CreateCommand を使用)。1 つのセッションで複数のコマンドがサポートされます。詳細については、「OLE DB コマンド (SQL Server Compact)」を参照してください。

  • 行セットの作成 (IOpenRowset::OpenRowset を使用)。詳細については、「OLE DB 行セット (SQL Server Compact)」を参照してください。

  • スキーマ行セットの作成 (IDBSchemaRowset::GetRowset を使用)。SQL Server Compact 3.5 でサポートされるスキーマ行セットの詳細については、「OLE DB スキーマ行セット (SQL Server Compact)」を参照してください。

  • テーブルおよびインデックスの作成と変更 (ITableDefinition および IIndexDefinition を使用)。

  • トランザクションの開始と終了。

プロバイダ固有のセッションのプロパティ

SQL Server Compact 3.5 では、プロバイダ固有の DBPROP_SSCE_TRANSACTION_COMMIT_MODE プロパティがサポートされています。このプロパティを使用して、コミット後にエンジンがバッファ プールをフラッシュするかどうかを指定します。この値を変更するには、DBPROPSET_SSCE_SESSION プロパティ セット内の DBPROP_SSCE_TRANSACTION_COMMIT_MODE を ISessionProperties インターフェイスに渡します。詳細については、「プロバイダ固有のプロパティ (OLE DB)」を参照してください。

次の例は、セッション オブジェクトを作成し、コミット後にデータベース エンジンがバッファ プールをフラッシュするようにセッション プロパティを変更する方法を示しています。

使用例

   // Object declarations
HRESULT                  hr=S_OK;
ULONG                    i                    = 0;
DBPROPSET                dbpropset[2];
DBPROP                   dbprop[1];
DBPROP                   sscedbprop[1];

// Declare the provider interfaces.

IDBInitialize *          pIDBInitialize       = NULL;
IDBProperties *          pIDBProperties       = NULL;
IDBCreateSession *       pIDBCreateSession    = NULL;
ISessionProperties *     pISessionProperties  = NULL;
// Initialize the the data source object.
hr = CoCreateInstance(CLSID_SQLSERVERCE, NULL, CLSCTX_INPROC_SERVER, 
        IID_IDBInitialize, (LPVOID *) &pIDBInitialize);
if (FAILED(hr))
{
    //Send an error-specific message and do error handling.
    goto Exit;
}
// Initialize the the property variants.
for (i = 0; i < sizeof(dbprop)/sizeof(dbprop[0]); i++)
{
    VariantInit(&dbprop[i].vValue);
}
for (i = 0; i < sizeof(sscedbprop)/sizeof(sscedbprop[0]); i++)
{
    VariantInit(&sscedbprop[i].vValue);
}
dbprop[0].dwPropertyID   = DBPROP_INIT_DATASOURCE;
dbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
dbprop[0].vValue.vt = VT_BSTR;
dbprop[0].vValue.bstrVal = SysAllocString(L"\\windows\\Northwind.sdf");
if(NULL == dbprop[0].vValue.bstrVal)
{
    hr = E_OUTOFMEMORY;
    goto Exit; 
}
dbpropset[0].rgProperties    = dbprop;
dbpropset[0].cProperties     = sizeof(dbprop)/sizeof(dbprop[0]);
dbpropset[0].guidPropertySet = DBPROPSET_DBINIT;
// Initialize the property to change the maximum buffer pool size.
sscedbprop[0].dwPropertyID = DBPROP_SSCE_MAXBUFFERSIZE;
sscedbprop[0].dwOptions = DBPROPOPTIONS_REQUIRED;
sscedbprop[0].vValue.vt = VT_I4;
sscedbprop[0].vValue.lVal = 20*1024; //limit cache usage to 20M, default is 640K
dbpropset[1].rgProperties    = sscedbprop;
dbpropset[1].cProperties     = sizeof(sscedbprop)/sizeof(sscedbprop[0]);
dbpropset[1].guidPropertySet = DBPROPSET_SSCE_DBINIT;
// Set the properties into the provider's data source object.
hr = pIDBInitialize->QueryInterface(IID_IDBProperties,(void**)&pIDBProperties);
if(FAILED(hr))
{
    goto Exit;
}
hr = pIDBProperties->SetProperties(sizeof(dbpropset)/sizeof(dbpropset[0]), 
    dbpropset);
if(FAILED(hr))
{
    goto Exit;
}
// Initialize the data source.
hr = pIDBInitialize->Initialize();
if(FAILED(hr))
{
   goto Exit;
}
// Initialize a session object.
hr = pIDBProperties->QueryInterface(IID_IDBCreateSession, (void **) &pIDBCreateSession);
if (FAILED(hr))
{
    //Send an error-specific message and do error handling.
    goto Exit;
}
hr = pIDBCreateSession->CreateSession(NULL, IID_ISessionProperties, 
    (IUnknown**) &pISessionProperties);
Exit:
    // Clean up resources
    return hr;