C++连接SQL Server数据库入门

概述

客户端(网络或C++终端等)管理器通过一系列知名的API(ODBC, OLE-DB, ADO…)提供的不同方式来访问数据库。
Tips1:表现出来的就是同一个数据库,C++中初始化这些API时,方式稍有不同(下面会有代码),但整体的调用方式,sql语句执行方式都是相同的。
Tips2:另外,不论是accessmysqlsql server,都可以通过同一套API进行访问,以统一的方式处理所有的数据库。

组成

API:(ODBC, OLE-DB, ADO…)
驱动程序: 是一些DLL,提供了API和数据库之间的接口。
数据源: 包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

数据库系统和文件系统的关系

数据库的数据是结构化的,有联系的;而文件系统各记录无联系
关系型数据库(相对于文件系统,是各个分散独立无关系的。但数据表中A项目设置N个属性,便建立了多种关系)
图片名称

ODBC、ADO、DSN关系是什么?

DSN(Data Source Name): 为ODBC定义了一个确定的数据库和必须用到的ODBC驱动程序(换句话说要ODBC就必须要建立DSN)
ODBC API: 访问技术只适用于windows系统,因为需要在ODBC驱动程序管理器中进行数据源注册
ADO API: 具有跨系统平台特性,移植性好,无需手动设置DSN连接

手动建立数据库及数据表

  • 下载安装SQL Server 2016并启动服务(启动方式见【启动】
  • 找到Managemant studio,点击到SQL Server登陆界面,设置user id:sa,pass word:xxxxxx
  • 右键【数据库】,添加一个名为【track】的数据库
  • 右键【track】,添加一张名为【photos】的数据表(会自动带前缀dbo)(如果新表未显示,刷新数据库即可)
  • 右键【photos】,点击【表】,弹出【列名】、【数据类型】设置窗口,设置两个列属性”path”、”features”,数据类型均为”int”
  • 右键【photos】,点击【编辑前200行】,可手动增删数据表中的数据,在此我们添加1行数据,path值:888;features值:111。

设计好的数据库界面如图所示
图片名称

C++连接SQL

首先建立一个win32应用程序,在#include "stdafx.h"
头文件中加入DLL文件,如下:

1
2
#include <windows.h> // cerr头文件
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

data.cpp文件如下,注释都在代码中。此处采用OLE-DB连接,与ADO一样,具有较强的可移植性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include "stdafx.h"
#include <iostream>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecodeset;

HRESULT hr = CoInitialize(NULL); //初始化COM
hr = m_pConnection.CreateInstance("ADODB.Connection"); // 建立数据库连接
if (FAILED(hr))
cout << "Init failed!" << endl;
try
{
_bstr_t strConnect = "Provider=SQLOLEDB.1;Persist Security Info=True;Initial Catalog = track; Data Source = 192.168.1.190; User ID = sa; PassWord = 123456;";
//Data Source为主机IP地址,若为access数据库,则为数据库文件名:"xxx.mdb"
//Initial Catalog:数据库名
//User ID:用户名
//PassWord:用户密码

hr = m_pConnection->Open(strConnect, "", "", adModeUnknown);
if (FAILED(hr))
cout << "Open failed!" << endl;
}
catch (_com_error e){
//MessageBox(e.Description(), "warning");
cerr << "ERROR:" << (char*)e.Description();
}
_bstr_t bstrSQL;
bstrSQL = "update photos set path = 555 where features = 111"; // SQL语句,修改features属性中value == 111的path值。
m_pConnection->Execute(bstrSQL, NULL, adCmdText); // 执行SQL语句

return 0;

}

ODBC连接上面写到过只能在win平台,且需要手动建立DSN连接。DSN建立连接方式如下:

  • 【控制面板】——【管理工具】——【ODBC数据源】根据你的电脑选择32、64位
  • 接着在【用户DSN、系统DSN】中均要添加相应的数据源,【添加方式】

接下来仅修改data.cpp文件中connection处的代码即可

1
2
3
4
5
6
7
8
string strConnection = "dsn=";
strConnection += "sql";
strConnection += ";uid=";
strConnection += "sa";
strConnection += ";pwd=";
strConnection += "123456";
strConnection += ";";
hr = m_pConnection->Open(strConnection.c_str(),"","",adModeUnknown);

Ref:
📎:数据库原理分析
📎:C++与SQL Server2008连接及配置
📎:用数据源(ODBC)创建数据库连接DSN设置