建立连接

使用神通数据库 OLE DB时,用户(consumer)必须调用CoCreateInstance创建一个数据源对象。每个OLE DB都有一个唯一的类标示符。对于神通数据库 OLE DB,类标示符是CLSID_OSCAROLEDB = {}。

数据源对象提供IDBProperties接口,通过它用户可以设置一些基本的认证信息, 比如数据库服务器地址,数据库名,用户名和密码等。 数据源对象还提供IDBInitialize接口。属性已经设置后, 通过调用IDBinitialize::Initialize方法将建立与指定数据库的一个连接。 下面以一个代码片断作为例子。

void InitializeAndEstablishConnection()
{
//Initialize the COM library.
    CoInitialize(NULL);
//Obtain access to the SHENTONG OLE DB provider.
    hr = CoCreateInstance(CLSID_OSCAROLEDB,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_IDBInitialize,
                          (void **) &pIDBInitialize);
    /*
    Initialize the property values needed
    to establish the connection.
    */
    for (i = 0; i < 4; i++)
        VariantInit(&InitProperties[i].vValue);
//Server name.
    InitProperties[0].dwPropertyID = DBPROP_INIT_LOCATION;
    InitProperties[0].vValue.vt = VT_BSTR;
    InitProperties[0].vValue.bstrVal=
        SysAllocString(L"Server IP");
    InitProperties[0].dwOptions = DBPROPOPTIONS_REQUIRED;
    InitProperties[0].colid = DB_NULLID;
//Database.
    InitProperties[1].dwPropertyID = DBPROP_INIT_ DATASOURCE;
    InitProperties[1].vValue.vt = VT_BSTR;
    InitProperties[1].vValue.bstrVal= SysAllocString(L"database");
    InitProperties[1].dwOptions = DBPROPOPTIONS_REQUIRED;
    InitProperties[1].colid = DB_NULLID;
//Username (login).
    InitProperties[2].dwPropertyID = DBPROP_AUTH_USERID;
    InitProperties[2].vValue.vt = VT_BSTR;
    InitProperties[2].vValue.bstrVal= SysAllocString(L"system ");
    InitProperties[2].dwOptions = DBPROPOPTIONS_REQUIRED;
    InitProperties[2].colid = DB_NULLID;
//Password.
    InitProperties[3].dwPropertyID = DBPROP_AUTH_PASSWORD;
    InitProperties[3].vValue.vt = VT_BSTR;
    InitProperties[3].vValue.bstrVal= SysAllocString(L" szoscar55");
    InitProperties[3].dwOptions = DBPROPOPTIONS_REQUIRED;
    InitProperties[3].colid = DB_NULLID;
    /*
    Construct the DBPROPSET structure(rgInitPropSet). The
    DBPROPSET structure is used to pass an array of DBPROP
    structures (InitProperties) to the SetProperties method.
    */
    rgInitPropSet[0].guidPropertySet = DBPROPSET_DBINIT;
    rgInitPropSet[0].cProperties = 4;
    rgInitPropSet[0].rgProperties = InitProperties;
//Set initialization properties.
    hr = pIDBInitialize->QueryInterface(IID_IDBProperties,
                                        (void **)&pIDBProperties);
    hr = pIDBProperties->SetProperties(1, rgInitPropSet);
    pIDBProperties->Release();
//Now establish the connection to the data source.
    pIDBInitialize->Initialize()
}

如果用户在ADO中连接神通数据库,连接字串的形式为:

DATA SOURCE = dbname; LOCATION=serverlocation; USERID=id; PASSWORD=xxx;

例如:

"DATA SOURCE=OSRDB; LOCATION=192.9.200.100;USERID=SYSDBA;PASSWORD=szoscar55;"