对于软件开发其实说白了就是在不停地和数据打交道, 所以数据库的操作是必不可少的, 接下来介绍VC开发中利用ADO建立ODBC数据源来访问MySQL数据库.
从我接触的数据库编程方式来说, 我觉得在vc开发连接数据库是比较难的, 也是很容易出错. 在android中, 系统自带sqlite数据库,只需要使用SQLiteOpenHelper抽象类即可完成与数据库的操作. 在java中, 使用jdbc连接mysql数据库, 下载相应jar调用相应接口,传入数据库类型与用户名密码进行数据库的操作. 但是ado连接数据库比较复杂, 接下来我们看一下如何使用ado连接数据库.
一. 安装mysql
首先你需要确保电脑上已经安装了mysql数据库, 并使用用户名与密码成功使用mysql. 如何安装配置mysql, 这里不做详细介绍.
如果不了解如何安装配置mysql可以参考这个地址: 点击打开链接
二. ADO方式连接MySql
1. 导入ado数据库, 在你的程序中添加下面语句来导入ado数据库
view plain copy print?
- // no_namespace rename("EOF", "adoEOF")防止命名重复,将EOF重命名为adoEOF
- #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
// no_namespace rename("EOF", "adoEOF")防止命名重复,将EOF重命名为adoEOF #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
2. 初始化com环境
view plain copy print?
- //初始化com环境
- AfxOleInit();
//初始化com环境 AfxOleInit();
3. 创建数据表结构,用来保存从数据库中获取的内容
假设数据表只有两个字段:用户ID与用户名
view plain copy print?
- typedef struct _OBJ_USER
- {
- int User_ID;
- TCHAR User_Name[32];
- }OBJ_USER;
typedef struct _OBJ_USER { int User_ID; TCHAR User_Name[32]; }OBJ_USER;
4.创建操作数据库的类operator类
view plain copy print?
- class CDataOperator
- {
- public:
- CDataOperator();
- ~CDataOperator();
- public:
- //打开指定的数据库
- BOOL OpenDatabase(CString strDbName, CString strUserName, CString strUserPwd);
- public:
- //执行sql语句,增加数据,删除数据
- BOOL ExecuteSQL(CString sql);
- //查询数据
- BOOL Select_From_User(vector<OBJ_USER> &vecObjUser);
- //插入数据, 可以插入图片,二进制数据(大数据)
- BOOL Insert_Into_User(OBJ_USER &objUser);
- //更新数据, 可更新大数据
- BOOL Update_For_User(OBJ_USER &objUser);
- public:
- //连接对象
- _ConnectionPtr m_pConnection;
- };
class CDataOperator { public: CDataOperator(); ~CDataOperator(); public: //打开指定的数据库 BOOL OpenDatabase(CString strDbName, CString strUserName, CString strUserPwd); public: //执行sql语句,增加数据,删除数据 BOOL ExecuteSQL(CString sql); //查询数据 BOOL Select_From_User(vector<OBJ_USER> &vecObjUser); //插入数据, 可以插入图片,二进制数据(大数据) BOOL Insert_Into_User(OBJ_USER &objUser); //更新数据, 可更新大数据 BOOL Update_For_User(OBJ_USER &objUser); public: //连接对象 _ConnectionPtr m_pConnection; };
5. operator类的定义
view plain copy print?
- CDataOperator::CDataOperator()
- {
- try
- {
- //创建连接对象
- HRESULT hr = m_pConnection.CreateInstance(_T("ADODB.Connection"));
- if (FAILED(hr))
- {
- m_pConnection = NULL;
- }
- }
- catch (_com_error &e)
- {
- e.ErrorMessage();
- }
- }
- CDataOperator::~CDataOperator()
- {
- if (m_pConnection)
- {
- try
- {
- //将连接对象关闭
- HRESULT hr = m_pConnection->Close();
- }
- catch (_com_error &e)
- {
- e.ErrorMessage();
- }
- //释放连接对象
- m_pConnection.Release();
- m_pConnection = NULL;
- }
- }
- //打开数据库的操作
- BOOL CDataOperator::OpenDatabase(CString strDbName, CString strUserName, CString strUserPwd)
- {
- if (NULL ==&n