_ConnectionPtr pConnection;
try
{
HRESULT hr = pConnection.CreateInstance("ADODB.Connection");//創建Connection物件
if(SUCCEEDED(hr))
{
hr = pConnection->Open("driver={SQL Server};Server=(local);DATABASE=master;UID=sa;PWD=888888","","",adModeUnknown);
}
}
catch (_com_error e) //COM錯誤取得,當執行COM功能的時候,如果出錯,可以捕捉到_com_error的例外
{
CString strComError;
strComError.Format("錯誤編號: %08lx\n錯誤資訊: %s\n錯誤源: %s\n錯誤描述: %s",
e.Error(), // 錯誤編號
e.ErrorMessage(), // 錯誤資訊
(LPCSTR) e.Source(), // 錯誤源
(LPCSTR) e.Description()); // 錯誤描述
::MessageBox(NULL,strComError,"錯誤",MB_ICONEXCLAMATION);
}
//------判斷資料庫是否存在
_RecordsetPtr pRecordset;
pRecordset.CreateInstance("ADODB.Recordset");
_variant_t vCount;
try
{
_variant_t ra;
pRecordset = pConnection->Execute("SELECT COUNT(*) FROM sysdatabases WHERE name = 'HMSys'",&ra,adCmdText);
vCount = pRecordset->GetCollect((_variant_t)(long)(0));
}
catch(_com_error e)
{
AfxMessageBox("error!");
}
CString str;
str.Format("%d", vCount.iVal);
if(0 == vCount.iVal)
{
CString Sql;
Sql.Format("USE MASTER RESTORE DATABASE HMSys FROM DISK = '%s' WITH MOVE 'HMSys_Data' TO 'c:\\HMSys.mdf', MOVE 'HMSys_Log' TO 'c:\\HMSys.ldf'", FindFilePath()) ;
try
{
_variant_t ra;
pRecordset = pConnection->Execute((_bstr_t)Sql,&ra,adCmdText);
pRecordset->Close();
}
catch(_com_error e)
{
}
}
pConnection->Close();
///////////////
HRESULT hr = m_pConnection.CreateInstance("ADODB.Connection");//創建Connection物件
try
{
if(SUCCEEDED(hr))
{
hr = m_pConnection->Open("driver={SQL Server};Server=.;DATABASE=HMSys;UID=sa;PWD=","","",adModeUnknown);
}
}
catch (_com_error e) //COM錯誤取得,當執行COM功能的時候,如果出錯,可以捕捉到_com_error的例外
{
CString strComError;
strComError.Format("錯誤編號: %08lx\n錯誤資訊: %s\n錯誤源: %s\n錯誤描述: %s",
e.Error(), // 錯誤編號
e.ErrorMessage(), // 錯誤資訊
(LPCSTR) e.Source(), // 錯誤源
(LPCSTR) e.Description()); // 錯誤描述
::MessageBox(NULL,strComError,"錯誤",MB_ICONEXCLAMATION);
}
以上是C++連接資料庫代碼,c++運行環境是VC++6.0,資料庫是sql sever 2008,
運行時總是報錯

忽略后繼續運行程式,又

因為近幾天剛接觸資料庫SQL,不明白怎么回事,在百度上查,沒有解決,求各位幫幫忙,不甚感激!!
uj5u.com熱心網友回復:
自己建立一個sql帳號,用你自己的sql帳號登錄密碼登錄。uj5u.com熱心網友回復:
拿別人封裝好的SQL類 輸入你的引數 去連接
uj5u.com熱心網友回復:
請用try...catch捕獲該捕獲的例外。uj5u.com熱心網友回復:
你的sql server資料庫身份驗證是“Windows身份驗證模式”還是“混合模式”?如果是“Windows身份驗證模式”的話C++程式是連接不上的。uj5u.com熱心網友回復:
剛剛測驗了在我電腦上可以連接的。你試試
// ADO.h
#include <windows.h>
#import "X:\\Program Files\\Common Files\\System\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")// sql安裝路徑
#include <iostream>
using namespace std;
class ADO
{
public:
// 建構式,初始化環境,連接資料庫
ADO(TCHAR* ServerName/*服務器名稱*/,
TCHAR* pDatabase/*資料庫名稱*/,
TCHAR* pUser/*用戶名*/,
TCHAR* pWorrd/*密碼*/,
string DateName/*資料表名稱*/);
// 解構式,斷開資料庫,釋放環境
~ADO();
public:
_RecordsetPtr GetRecordset(_bstr_t SQL/*要執行的陳述句*/);
LONG GetCount();
TCHAR* GetVariantToChar(variant_t a/*轉換的值*/);
TCHAR* GetItemValue(long a/*獲取某列資料*/);
TCHAR* GetItemValue(TCHAR* szName/*欄位名稱*/);
VOID AddValue(TCHAR* szName, TCHAR* szFuntion, TCHAR* szDesc, TCHAR* szReturnV);
VOID SelectForm(TCHAR* szTable/*要查詢的表*/,
TCHAR* szWhereName/*欄位名稱*/,
TCHAR* szWhereValue/*值*/);
VOID SelectForm(TCHAR* szTable/*要查詢的表*/);
VOID DeleteForm(TCHAR* szTable,/*表*/
TCHAR* szWhereNmae/*欄位名稱*/,
TCHAR* szWhereValue/*條件值*/);
VOID UpdateValue(TCHAR* szTable/*表*/,
TCHAR* szWhereNmae/*欄位名稱*/,
TCHAR* szWhereValue/*條件值*/,
TCHAR* szDataName/*要修改的欄位名稱*/,
TCHAR* szDataValue/*要修改的值*/);
//private:
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
LONG loNameCount;/*欄位的數量*/
};
//ADO.cpp
#include "ADO.h"
ADO::ADO(TCHAR* ServerName/*服務器名稱*/,
TCHAR* pDatabase/*資料庫名稱*/,
TCHAR* pUser,/*用戶名*/
TCHAR* pWorrd,/*密碼*/
string DateName/*資料表名稱*/)
{
try{
// 初始化COM環境
::CoInitialize(NULL);
// 創建連接物件
m_pConnection.CreateInstance(__uuidof(Connection));
// 連接資料庫
TCHAR* pOpen = new TCHAR[1024];
_snwprintf_s(pOpen, 1024, 1024, TEXT("Provider=SQLOLEDB;Data Source=%s;Initial Catalog=%s;"), ServerName, pDatabase);
HRESULT hr = m_pConnection->Open(pOpen, pUser, pWorrd, -1);
delete []pOpen;
pOpen = NULL;
if(hr != S_OK)
{
MessageBox(NULL,TEXT("連接資料錯誤"),TEXT("錯誤"),MB_OK);
}
}
catch(_com_error e)
{
MessageBox(NULL,e.Description(),TEXT("錯誤"),MB_OK);
return;
}
string szSQL = "select * from ";
szSQL += DateName;
_bstr_t b_s(szSQL.c_str());
GetRecordset(b_s);
variant_t v = m_pRecordset->GetFields()->GetCount();
loNameCount = (LONG)v;
}
ADO::~ADO()
{
if(m_pRecordset != NULL)
{
m_pRecordset->Close();
m_pConnection->Close();
m_pConnection = NULL;
m_pRecordset = NULL;
}
// 釋放COM環境
::CoUninitialize();
}
// 插入一條SQL陳述句到資料庫
_RecordsetPtr ADO::GetRecordset(_bstr_t SQL/*要執行的陳述句*/)
{
m_pRecordset = NULL;
try{
if(m_pConnection == NULL){this->~ADO();}
m_pRecordset.CreateInstance(__uuidof(Recordset));
m_pRecordset->Open((_bstr_t)SQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
MessageBox(NULL,e.Description(),TEXT("錯誤"),MB_OK);
m_pRecordset = NULL;
return m_pRecordset;
}
return m_pRecordset;
}
// 獲取欄位數量
LONG ADO::GetCount()
{
//variant_t v = m_pRecordset->GetFields()->GetCount();
//return (long)v;
return loNameCount;
}
// 萬能變數轉字串
TCHAR* ADO::GetVariantToChar(variant_t a/*轉換的值*/)
{
TCHAR* psz = NULL;
psz = (TCHAR*)(_bstr_t)a;
return psz;
}
// 獲取一列資料值
TCHAR* ADO::GetItemValue(long a/*獲取某列資料*/)
{
variant_t v1 = m_pRecordset->GetFields()->GetItem((long)a)->Value;
return GetVariantToChar(v1);
}
// 獲取某個欄位的值
TCHAR* ADO::GetItemValue(TCHAR* szName/*欄位名稱*/)
{
_bstr_t bstr_t(szName);
return GetVariantToChar(m_pRecordset->GetCollect(bstr_t));
}
// 添加一行資料
VOID ADO::AddValue(TCHAR* szName, TCHAR* szFuntion, TCHAR* szDesc, TCHAR* szReturnV)
{
_bstr_t bstr1(szName);
_bstr_t bstr2(szFuntion);
_bstr_t bstr3(szDesc);
_bstr_t bstr4(szReturnV);
m_pRecordset->AddNew();
m_pRecordset->PutCollect("szName", bstr1);
m_pRecordset->PutCollect("szFuntion", bstr2);
m_pRecordset->PutCollect("szDesc", bstr3);
m_pRecordset->PutCollect("szReturnV", bstr4);
m_pRecordset->Update();
}
// 帶條件的查詢資料
VOID ADO::SelectForm(TCHAR* szTable/*要查詢的表*/, TCHAR* szWhereName/*欄位名稱*/, TCHAR* szWhereValue/*值*/)
{
TCHAR szSQL[1024] = { 0 };
_snwprintf_s(szSQL, 1024, 1024, TEXT("select *from %s where %s = '%s'"), szTable, szWhereName, szWhereValue);
_bstr_t bstr_t(szSQL);
GetRecordset(bstr_t);
}
// 不帶條件的查詢資料,查詢所有資料
VOID ADO::SelectForm(TCHAR* szTable/*要查詢的表*/)
{
TCHAR szSQL[1024] = { 0 };
_snwprintf_s(szSQL, 1024, 1024, TEXT("select * from %s"), szTable);
_bstr_t bstr_t(szSQL);
GetRecordset(bstr_t);
}
// 洗掉資料
VOID ADO::DeleteForm(TCHAR* szTable, TCHAR* szWhereNmae/*欄位名稱*/, TCHAR* szWhereValue/*條件值*/)
{
SelectForm(szTable, szWhereNmae, szWhereValue);
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update();
}
VOID ADO::UpdateValue(TCHAR* szTable/*表*/,
TCHAR* szWhereNmae/*欄位名稱*/,
TCHAR* szWhereValue/*條件值*/,
TCHAR* szDataName/*要修改的欄位名稱*/,
TCHAR* szDataValue/*要修改的值*/)
{
SelectForm(szTable, szWhereNmae, szWhereValue);
_bstr_t bstr1(szDataValue);
_bstr_t bstr2(szDataName);
m_pRecordset->PutCollect(bstr2, bstr1);
m_pRecordset->Update();
}
// main.cpp
#include "ADO.h"
int main()
{
TCHAR szSource[] = {TEXT("DESKTOP-T62BHCH")};
TCHAR szDatabase[] = {TEXT("learning")};
TCHAR szUser[] = {TEXT("sa")};
TCHAR szPass[] = {TEXT("123456")};
ADO ado(szSource,szDatabase,szUser,szPass,"Student");
cout << "共" << ado.GetCount() << "個欄位" << endl;
return 0;
}
uj5u.com熱心網友回復:
// adoconnassy.h: interface for the Cadoconnassy class.
//
//////////////////////////////////////////////////////////////////////
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
#if !defined(AFX_ADOCONNASSY_H__79D89C88_C3BB_475F_95AF_2F24A96E5FE5__INCLUDED_)
#define AFX_ADOCONNASSY_H__79D89C88_C3BB_475F_95AF_2F24A96E5FE5__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class Cadoconnassy
{
public:
Cadoconnassy();
virtual ~Cadoconnassy();
//添加一個指向Connection物件的指標:
_ConnectionPtr m_pConnection;
//添加一個指向Recordset物件的指標:
_RecordsetPtr m_pRecordset;
// 初始化—連接資料庫
void OnInitADOConn();
// 執行查詢
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
// 執行SQL陳述句,Insert Update _variant_t
BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
#endif // !defined(AFX_ADOCONNASSY_H__79D89C88_C3BB_475F_95AF_2F24A96E5FE5__INCLUDED_)
// adoconnassy.cpp: implementation of the Cadoconnassy class.
//
//////////////////////////////////////////////////////////////////////
//
#include "stdafx.h"
#include "adoconnassy.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
Cadoconnassy::Cadoconnassy()
{
}
Cadoconnassy::~Cadoconnassy()
{
}
// 初始化—連接資料庫
void Cadoconnassy::OnInitADOConn()
{
// 初始化OLE/COM庫環境
::CoInitialize(NULL);
try
{
// 創建Connection物件
m_pConnection.CreateInstance("ADODB.Connection");
// 設定連接字串,必須是BSTR型或者_bstr_t型別
_bstr_t strConnect = "Provider=SQLOLEDB;Server=服務器地址;Database=資料庫名稱;uid=登陸用戶;pwd=登陸密碼";//自己修改
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
// 捕捉例外
catch(_com_error e)
{
// 顯示錯誤資訊
AfxMessageBox(e.Description());
}
}
// 執行查詢
_RecordsetPtr& Cadoconnassy::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 連接資料庫,如果Connection物件為空,則重新連接資料庫
if(m_pConnection==NULL)
OnInitADOConn();
// 創建記錄集物件
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的記錄
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
}
// 捕捉例外
catch(_com_error e)
{
// 顯示錯誤資訊
AfxMessageBox(e.Description());
}
// 回傳記錄集
return m_pRecordset;
}
// 執行SQL陳述句,Insert Update _variant_t
BOOL Cadoconnassy::ExecuteSQL(_bstr_t bstrSQL)
{
// _variant_t RecordsAffected;
try
{
// 是否已經連接資料庫
if(m_pConnection == NULL)
OnInitADOConn();
// Connection物件的Execute方法:(_bstr_t CommandText,
// VARIANT * RecordsAffected, long Options )
// 其中CommandText是命令字串,通常是SQL命令。
// 引數RecordsAffected是操作完成后所影響的行數,
// 引數Options表示CommandText的型別:adCmdText-文本命令;adCmdTable-表名
// adCmdProc-存盤程序;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
return true;
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
return false;
}
}
void Cadoconnassy::ExitConnect()
{
// 關閉記錄集和連接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 釋放環境
::CoUninitialize();
}
給你個能用的
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/72232.html
標籤:數據庫
上一篇:設計按鈕閃爍功能
