< p >C语言是一种强大的编程语言,而ADO(ActiveX Data Objects)是一个可以访问数据库的接口。这篇文章将介绍如何在C语言中使用ADO来连接Oracle数据库。 p >< p >在C语言中使用ADO访问Oracle非常方便,我们可以使用Windows API创建一个Connection对象并使用该对象连接到数据库。例如: p >< pre >// 定义Connection对象
IDBProperties *pIDBProperties = NULL;
ISessionProperties *pISessionProperties = NULL;
IDBInitialize *pIDBInitialize = NULL;
IDataSourceLocator *pIDataSourceLocator = NULL;
IServerLocation *pIServerLocation = NULL;
IDBCreateSession *pIDBCreateSession = NULL;
IDBDataSourceAdmin *pIDBDataSourceAdmin = NULL;
IUnknown *pIUnkOuter = NULL;
hr = CoInitialize(NULL);
hr = CoCreateInstance(CLSID_MSDAINITIALIZE, NULL, CLSCTX_INPROC_SERVER, IID_IDBInitialize, (void**)&pIDBInitialize);
hr = pIDBInitialize->QueryInterface(IID_IDBProperties, (void**)&pIDBProperties);
hr = pIDBProperties->SetProperties(0, 0, 0, 0);
hr = pIDBInitialize->Initialize();
hr = CoCreateInstance(CLSID_MSDAORA, NULL, CLSCTX_INPROC_SERVER, IID_IDBCreateSession, (void**)&pIDBCreateSession);
hr = pIDBCreateSession->CreateSession(NULL, IID_ISessionProperties, (IUnknown**)&pISessionProperties);
hr = pISessionProperties->SetProperties(0, 0, 0, strConnectString, lstrlen(strConnectString));
hr = pISessionProperties->QueryInterface(IID_IServerLocation, (void**)&pIServerLocation); pre >< p >上述代码使用了MSDAORA的类库来连接到Oracle数据库,并创建了一个ISessionProperties对象,该对象可以让我们进行更多的数据库操作。 p >< p >接下来,我们可以执行SQL语句来对数据库进行操作。例如: p >< pre >// 定义Command对象
IDBCreateCommand *pIDBCreateCommand = NULL;
ICommandText *pICommandText = NULL;
hr = pIDBCreateSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pIDBCreateCommand);
hr = pIDBCreateCommand->CreateCommand(NULL, IID_ICommandText, (IUnknown**)&pICommandText);
hr = pICommandText->SetCommandText(strSQL);
hr = pICommandText->Execute(NULL, IID_NULL, NULL, &dwRetVal); pre >< p >上面这段代码创建了一个Command对象并执行了一个SQL语句。如果我们要获取数据,可以使用Recordset对象。例如: p >< pre >// 定义Recordset对象
IDBCreateCommand *pIDBCreateCommand = NULL;
ICommandText *pICommandText = NULL;
IUnknown *pIUnknown = NULL;
hr = pIDBCreateSession->CreateSession(NULL, IID_IDBCreateCommand, (IUnknown**)&pIDBCreateCommand);
hr = pIDBCreateCommand->CreateCommand(NULL, IID_IUnknown, (IUnknown**)&pIUnknown);
hr = pIUnknown->QueryInterface(IID_ICommandText, (void**)&pICommandText);
hr = pICommandText->SetCommandText(strSQL);
hr = pICommandText->Execute(NULL, IID_IRowset, ¶ms, &dwRowsetRetVal, (IUnknown**)&pIRowset);
hr = CoCreateInstance(CLSID_Recordset, NULL, CLSCTX_INPROC_SERVER, IID_Recodset, (void**)&pRecordset);
hr = pRecordset->QueryInterface(IID_IRowsetRelease, (void**)&pIRowsetRelease);
hr = pRecordset->Open(pIRowsetRelease, NULL, adOpenStatic, adLockOptimistic, NULL);
while (! pRecordset->adoEOF) {
// 录取数据
} pre >< p >上面这段代码使用了Recordset对象来从数据库中读取数据。 p >< p >在C语言中使用ADO连接Oracle数据库非常方便。我们只需要使用Windows API来创建对象,然后使用这些对象来操作数据库。 p >< p >总结:C语言中使用ADO连接Oracle数据库是非常方便的,我们可以使用Windows API来创建对象并操作数据库。这些对象包括Connection、Command、Recordset等。 p >