C++連接SQL數據庫分步驟進行
我們在進行C++連接SQL數據庫的操作時,首先應該進行相應的系統配置,然後初始化C++與SQL連接,然後再進行數據連接的操作,然後應用SQL執行語言來具體操作。
C++連接SQL數據庫第一步 系統配置
1.設置SQLSERVER服務器爲SQL登錄方式,並且系統安全性中的sa用戶要設置登錄功能爲“啓用”,還有必須要有密碼。
2.需要在ODBC中進行數據源配置,數據源選\”SQL SERVER”,登錄方式使用“使用輸入用戶登錄ID和密碼的SQL SERVER驗證”,並填寫登錄名(sa)和密碼,注意一點,密碼不能爲空,這就意味着你的sa用戶必須得有密碼。否則無法通過系統本身的安全策略。測試通過就完成了配置。
C++連接SQL數據庫第二步 C++與SQL連接初始化
1.在你所建立的C++項目中的stdafx.h頭文件中引入ADO
具體代碼如下
#import “c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")//注意寫no_namespace的時候不能另起一行,就是不能敲enter鍵,直接在後面寫,中間用n個空格都行
2.定義_ConnectionPtr變量後調用Connection對象的Open方法建立與服務器的連接。
數據類型_ConnectionPtr實際上是由類模板_com_ptr_t得到的一個具體的實例類。_ConnectionPtr類封裝了Connection對象的Idispatch接口指針及其一些必要的操作。可以通過這個指針操縱Connection對象。
例如連接SQLServer數據庫,代碼如下:
//連接到MS SQL Server
//初始化指針
_ConnectionPtr pMyConnect = NULL;
HRESULT hr = pMyConnect.CreateInstance(__uuidof(Connection));
//if (FAILED(hr)) //不知怎麼會報錯
//return;
//初始化鏈接參數
_bstr_t strConnect = “Provider=SQLOLEDB; Server=127.0.0.1; Database=mytest; uid=sa; pwd=sa;”; //Server爲你SQL Server所運行計算機的IP,Database指你配置數據源的數據庫
//執行連接
try
{
// Open方法連接字串必須四BSTR或者_bstr_t類型
pMyConnect->Open(strConnect, “”, “”, NULL);
}
catch(_com_error &e)
{
MessageBox(e.Description(), “警告”, MB_OK|MB_ICONINFORMATION);
}
C++連接SQL數據庫第四步 執行SQL語句
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));//初始化Recordset指針
//執行操作
try
{
pRecordset->Open(_variant_t(”userinfo”),
_variant_t((IDispatch*)pMyConnect),
adOpenKeyset, adLockOptimistic, adCmdTable);
}
catch (_com_error &e)
{
MessageBox(”無法打開userinfo表\”, “系統提示”, MB_OK|MB_ICONINFORMATION);
}
CString strSql=”select * from tb_goods”;//具體執行的SQL語句
m_pRecordset=m_pConnection->Execute(_bstr_t(strSql), NULL, adCmdText);//將查詢數據導m_pRecordset數據容器
至此 你的SQL語句已經執行完成了m_pRecordset內的數據就是你執行的結果。
取得記錄:
while(!m_pRecordset->adoEOF)//遍歷並讀取name列的記錄並輸出
{
CString temp = (TCHAR *)(_bstr_t)m_pRecordset->GetFields()->GetItem
(”name”)->Value;
AfxMessageBox(temp);
pRecordset->MoveNext();
}
插入記錄
//記得初始化指針再執行以下操作
CString strsql;
strsql.Format(”insert into tb_goods(no,name, price)
values(’%d’,'%s’, %d)”,m_intNo,m_strName,m_intPrice);
m_pRecordset=m_pConnection->
Execute(_bstr_t(strsql),NULL,adCmdText);
修改記錄
CString strsql;
strsql.Format(”update tb_goods set name=’%s’ ,
price=%d where no=%d “,m_strName,m_intPrice,m_intNo);
m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText);
刪除記錄
CString strsql;
strsql.Format(”delete from tb_goodswhere no= ‘%d’ “,m_intNo);
m_pRecordset=m_pConnection->Execute(_bstr_t(strsql),NULL,adCmdText);