- 后来查资料知道,ADO是com组件,它必须先进行初始才能够正常使用,初始方法是在代码前加入一行:
- CoInitialize(NULL);
- 当然,最好在代码结束的地方加一行
- CoUninitialize();
- 那么,程序就能够正常运行了.
- 总结一下,在MFC中可以用AfxOleInit();但在非MFC环境下一定要用CoInitialize().有部分高深者习惯将CoInitialize()放在工程的APP类的InitialInstance()中,所以在直接调用ADO联机的地方看不到它,但千万不要以为没有它也能调用ADO进行数据访问哦!
后来查资料知道,ADO是com组件,它必须先进行初始才能够正常使用,初始方法是在代码前加入一行:
CoInitialize(NULL);
当然,最好在代码结束的地方加一行
CoUninitialize();
那么,程序就能够正常运行了.
总结一下,在MFC中可以用AfxOleInit();但在非MFC环境下一定要用CoInitialize().有部分高深者习惯将CoInitialize()放在工程的APP类的InitialInstance()中,所以在直接调用ADO联机的地方看不到它,但千万不要以为没有它也能调用ADO进行数据访问哦!
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEof")
#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{CoInitialize(NULL);
_ConnectionPtr m_pConnection; //连接对象指针
_RecordsetPtr m_pRecordset; //记录集对象指针
try
{ m_pConnection.CreateInstance("ADODB.Connection");
//创建连接对象实例
_bstr_t strConnect="Provider=SQLOLEDB.1;Persist Security Info=False;Initial Catalog=yu; Data Source=127.0.0.1";
//连接字符串,这里Query是数据库名,127.0.0.1代表本地主机
m_pConnection->Open(strConnect,"sa","123",adModeUnknown);
//打开数据库
}
catch (_com_error e)
//捕捉错误
{ printf("Error:\n");
printf("Code = %08lx\n", e.Error());
printf("Code meaning = %s\n", (char*) e.ErrorMessage());
printf("Source = %s\n", (char*) e.Source());
printf("Description = %s\n", (char*) e.Description());
}
CoUninitialize();
}