MFC fornece dois conjuntos distintos de classes para acessar banco de dados: um para permitir o acesso através de DAO, e outros através de ODBC. O método DAO é geralmente usado para acessar bancos de dados desktop e o método ODBC para conectar-se servidores de banco de dados relacionais através de uma fonte de dados.
ODBC
O Microsoft Open Database Connectivity (ODBC) é uma interface de linguagem de programação C, que torna possível que aplicativos acessem dados de uma variedade de sistemas de gerenciamento de banco de dados (SGBD). ODBC é escrita em baixo nível, e uma interface de alto desempenho que é projetado especificamente para armazenamentos de dados relacionais.
O Microsoft Foundation Classes (MFC) fornece bibliotecas de classes para programação com Open Database Connectivity (ODBC).
CDatabase
Representa uma conexão com uma fonte de dados, através do qual você pode operar com esta fonte de dados.
Conectando ao banco de dados MSSQL Server
1 – Crie um novo projeto C++ MFC Application Dialog Based, coloque no dialogo 4 componentes Static Text, 3 componentes Edit Control, e um Button, disponha os componentes como na figura abaixo:
2 – No painel de controle escolha a opção ferramentas administrativas e abra a opção Fontes de Dados ODBC para 32 ou 64bits, na guia DNS de Usuário, clique em adicionar e selecione o driver correspondente ao MSSQL:
3 – Crie os parâmetros de conexão contendo um nome para sua fonte de dados no qual será seu DNS e crie os parâmetros comuns para se conectar ao MSSQL, teste sua conexão e clique em OK:
4 – Use os trechos marcados do código abaixo para completar seu código gerado automaticamente
Exemplo:
Neste exemplo efetuamos uma conexão ao banco de dados através de um DNS ODBC usando a classe CDatabase.
C++
// MSSQLSever-cppDlg.cpp : implementation file // #include "stdafx.h" #include "MSSQLSever-cpp.h" #include "MSSQLSever-cppDlg.h" #include "afxdialogex.h" // Inclui classe de banco de dados MFC #include "afxdb.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CMSSQLSevercppDlg::CMSSQLSevercppDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CMSSQLSevercppDlg::IDD, pParent) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CMSSQLSevercppDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT1, m_usuario); DDX_Control(pDX, IDC_EDIT2, m_senha); DDX_Control(pDX, IDC_EDIT3, m_sid); } BEGIN_MESSAGE_MAP(CMSSQLSevercppDlg, CDialogEx) ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BUTTON1, &CMSSQLSevercppDlg::OnBnClickedButton1) END_MESSAGE_MAP() BOOL CMSSQLSevercppDlg::OnInitDialog() { CDialogEx::OnInitDialog(); SetIcon(m_hIcon, TRUE); SetIcon(m_hIcon, FALSE); return TRUE; } void CMSSQLSevercppDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } HCURSOR CMSSQLSevercppDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } // Desenvolvimento Aberto // nosso código começa aqui. // Cria menssagem int menssagem(bool correto) { LPCWSTR msg; if (correto) { msg = L"Conectado com sucesso!"; } else { msg = L"Erro na conexão"; } int msgboxID = MessageBox( NULL, msg, (LPCWSTR)L"Conexão", MB_ICONWARNING | MB_OK | MB_DEFBUTTON2 ); switch (msgboxID) { case IDOK: break; } return msgboxID; } void CMSSQLSevercppDlg::OnBnClickedButton1() { // Cria classe conexão ODBC CDatabase db; // Declara variaveis CString usuario; CString senha; CString fonte; CString conexao; // Alimenta variaveis m_sid.GetWindowTextW(fonte); m_usuario.GetWindowTextW(usuario); m_senha.GetWindowTextW(senha); // Cria string de conexão conexao = L"DSN=" + fonte + L";UID=" + usuario + L";PWD=" + senha; // Conecta ao banco de dados db.OpenEx(conexao, 0); // Verifica conexão if (db.IsOpen()) { menssagem(true); } else { menssagem(false); } }