c oledb连接mysql_C++ 使用OLEDB连接数据库
1. 首先要打开数据库连接,这里主要是针对SQL Server数据库。HRESULT CDBConnection::Open( CString strService, CString strUser, CString strPassword ){HRESULT hr = S_FALSE;// 如果连接是打开的,则先关闭连接再打开。if(m_bConnect){m_Session.Close();m
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;
};
更多推荐
所有评论(0)