1. 首先要打开数据库连接,这里主要是针对SQL Server数据库。

HRESULT CDBConnection::Open( CString strService, CString strUser, CString strPassword )

{

HRESULT hr = S_FALSE;

// 如果连接是打开的,则先关闭连接再打开。

if(m_bConnect)

{

m_Session.Close();

m_Connection.Close();

m_bConnect = FALSE;

}

// 打开数据库

CDBPropSet dbinit(DBPROPSET_DBINIT);

dbinit.AddProperty(DBPROP_INIT_DATASOURCE, strService); // 服务器名

dbinit.AddProperty(DBPROP_AUTH_USERID, strUser); // 用户名

dbinit.AddProperty(DBPROP_AUTH_PASSWORD, strPassword); // 密码

dbinit.AddProperty(DBPROP_AUTH_PERSIST_SENSITIVE_AUTHINFO, false);

dbinit.AddProperty(DBPROP_INIT_CATALOG, OLESTR("master")); // 数据库名

dbinit.AddProperty(DBPROP_INIT_LCID, (long)2052);

dbinit.AddProperty(DBPROP_INIT_PROMPT, (short)4);

hr = m_Connection.Open(_T("SQLOLEDB.1"), &dbinit);

if (FAILED(hr))

return hr;

hr = m_Session.Open(m_Connection);

if (FAILED(hr))

{

m_Connection.Close();

return hr;

}

m_strService = strService;

m_strUser = strUser;

m_strPassword = strPassword;

m_bConnect = TRUE;

return hr;

}

2. 执行SQL语句的函数

// 执行SQL命令

HRESULT CDBConnection::ExecSql( CString strSql )

{

HRESULT hr = S_FALSE;

CCommand rs;

if (m_bConnect == FALSE)

{

return DB_NOT_CONNECTED;

}

hr = rs.Open(m_Session, strSql, NULL, NULL, DBGUID_DEFAULT, FALSE);

return hr;

}

3 .执行查询SQL

HRESULT CDBConnection::QuerySql( CString strSql, _DBResult &dbr )

{

HRESULT hr = S_FALSE;

if (m_bConnect == FALSE)

{

return DB_NOT_CONNECTED;

}

dbr.rs = new CCommand;

hr = dbr.rs->Open(m_Session, strSql, NULL, NULL, DBGUID_DEFAULT, FALSE);

if (hr != S_OK)

{

return hr;

}

DBORDINAL ulColumns = 0;

LPOLESTR pStrings = NULL;

hr = dbr.rs->GetColumnInfo(&ulColumns, &dbr.ColumnInfo, &pStrings);

if (hr != S_OK)

{

return hr;

}

dbr.MyBind = new MYBIND[ulColumns];

dbr.rs->CreateAccessor(ulColumns, dbr.MyBind, sizeof(MYBIND)*ulColumns);

for (ULONG l=0; l

{

dbr.rs->AddBindEntry(l+1, DBTYPE_STR, sizeof(TCHAR)*MAX_COLUMN_SIZE, &dbr.MyBind[l].szValue,

NULL, &dbr.MyBind[l].dwStatus);

}

dbr.rs->Bind();

return S_OK;

}

4 .附录, 存储结构定义。

struct MYBIND

{

TCHAR szValue[MAX_COLUMN_SIZE]; // 每列的最大字节数

DWORD dwStatus;

MYBIND()

{

memset(this, 0, sizeof(*this));

}

};

struct _DBResult

{

MYBIND *MyBind;

DBCOLUMNINFO *ColumnInfo;

CCommand *rs;

};

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐