C++ 封装ADO连接sqlserver实现增删查改
时间: 2023-08-13 21:03:12 浏览: 215
好的,我可以给你提供一个简单的示例代码。在使用这个代码前,你需要安装并配置好ADO库。
```c++
#include <iostream>
#include <string>
#include <windows.h>
#include <comdef.h>
#include <atlbase.h>
#include <atlstr.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <fstream>
#include <vector>
#include <algorithm>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
using namespace std;
class ADOConnection {
private:
_ConnectionPtr m_pConnection;
public:
ADOConnection();
~ADOConnection();
bool Open(const char* connectionString);
bool ExecuteSQL(const char* sql);
bool ExecuteSP(const char* spName, const char* params);
_RecordsetPtr GetRecordset(const char* sql);
};
ADOConnection::ADOConnection() {
HRESULT hr = m_pConnection.CreateInstance(__uuidof(Connection));
if (FAILED(hr)) {
_com_error err(hr);
cerr << "CreateInstance Error: " << err.ErrorMessage() << endl;
exit(-1);
}
}
ADOConnection::~ADOConnection() {
if (m_pConnection->State == adStateOpen) {
m_pConnection->Close();
}
}
bool ADOConnection::Open(const char* connectionString) {
try {
m_pConnection->Open(connectionString, "", "", adModeUnknown);
return true;
}
catch (_com_error& e) {
cerr << "Connect Error: " << e.ErrorMessage() << endl;
return false;
}
}
bool ADOConnection::ExecuteSQL(const char* sql) {
try {
m_pConnection->Execute(sql, NULL, adCmdText);
return true;
}
catch (_com_error& e) {
cerr << "ExecuteSQL Error: " << e.ErrorMessage() << endl;
return false;
}
}
bool ADOConnection::ExecuteSP(const char* spName, const char* params) {
try {
CString strCmd;
strCmd.Format("{ call %s(%s) }", spName, params);
m_pConnection->Execute(_bstr_t(strCmd), NULL, adCmdText | adExecuteNoRecords);
return true;
}
catch (_com_error& e) {
cerr << "ExecuteSP Error: " << e.ErrorMessage() << endl;
return false;
}
}
_RecordsetPtr ADOConnection::GetRecordset(const char* sql) {
try {
_RecordsetPtr pRecordset("ADODB.Recordset");
pRecordset->Open(sql, m_pConnection.GetInterfacePtr(), adOpenKeyset, adLockReadOnly, adCmdText);
return pRecordset;
}
catch (_com_error& e) {
cerr << "GetRecordset Error: " << e.ErrorMessage() << endl;
return NULL;
}
}
```
这是一个基本的ADO连接类,封装了连接数据库、执行 SQL 语句和存储过程、获取记录集等常用操作,可以根据需要进行扩展。其中,`_ConnectionPtr`、`_RecordsetPtr` 等是 COM 对象的智能指针,用于自动管理对象的生命周期。
你可以在自己的代码中调用这些方法,实现对 SQL Server 数据库的增删查改操作。例如:
```c++
int main() {
ADOConnection conn;
if (!conn.Open("Provider=SQLOLEDB;Data Source=.;Initial Catalog=test;User ID=sa;Password=password")) {
cerr << "Connect failed!" << endl;
return -1;
}
if (!conn.ExecuteSQL("insert into mytable (name, age) values ('张三', 18)")) {
cerr << "Insert failed!" << endl;
return -1;
}
_RecordsetPtr pRecordset = conn.GetRecordset("select * from mytable");
while (!pRecordset->adoEOF) {
CString name = pRecordset->GetCollect("name");
int age = pRecordset->GetCollect("age");
cout << name << "\t" << age << endl;
pRecordset->MoveNext();
}
return 0;
}
```
这个示例代码中包括了连接数据库、插入数据、查询数据等操作,你可以根据需要修改和扩展。
阅读全文