如何用VC++访问SQLserver数据库?

zhucunwang2008 2008-11-04 12:34:16
如何用VC++访问SQLserver数据库?
...全文
430 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
youhao1999 2009-01-19
  • 打赏
  • 举报
回复
ADO技术,和vc连接其它数据库类似
图书馆找本书或摆渡一下就有答案
ooily 2008-12-25
  • 打赏
  • 举报
回复
不懂,up
lgy_come_on 2008-12-25
  • 打赏
  • 举报
回复
比如这个例子:
新建连接类如下(类名:ADOConn)
// ADOConn.cpp: implementation of the ADOConn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CheckManage.h"
#include "ADOConn.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}

// 初始化—连接数据库
void ADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);

try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=SQLOLEDB.1; Server=127.0.0.1; Database=CheckManage; uid=sa; Trusted_Connection=Yes";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}

// 执行查询
_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
// 返回记录集
return m_pRecordset;
}

// 执行SQL语句,Insert Update _variant_t
BOOL ADOConn::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 ADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}

再在ADOConn.h的头文件中加
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
并声明一下东西:
// 定义变量
public:
//添加一个指向Connection对象的指针:
_ConnectionPtr m_pConnection;
//添加一个指向Recordset对象的指针:
_RecordsetPtr m_pRecordset;

// 定义方法
public:
ADOConn();
virtual ~ADOConn();
void OnInitADOConn(); // 初始化—连接数据库
_RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行查询
BOOL ExecuteSQL(_bstr_t bstrSQL); // 执行SQL语句,Insert Update _variant_t
void ExitConnect(); // 断开连接
lgy_come_on 2008-12-25
  • 打赏
  • 举报
回复
ado,dao,odbc等 等 都可用 ,不过本人喜欢用ado,简单不难
zfbj 2008-11-17
  • 打赏
  • 举报
回复
严重支持用ADO,下面的代码是一段访问Access的代码,修改一下连接字符串就可以访问Sql Server:
// 初始化COM动态链接库
::CoInitialize(NULL);

// 创建ADO连接对象和记录集对象
_ConnectionPtr pConnection = NULL;
_RecordsetPtr pRecordset = NULL;
pConnection.CreateInstance(__uuidof(Connection));
pRecordset.CreateInstance(__uuidof(Recordset));

// 获得当前应用程序的路径
TCHAR szFileName[MAX_PATH];
::GetModuleFileName(AfxGetInstanceHandle(), szFileName, MAX_PATH);
CString strPath = szFileName;
strPath = strPath.Left(strPath.ReverseFind(TEXT('\\')) + 1); // 包含'\'字符

try
{
// 打开本地的Access数据库
CString strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + "test.mdb";

pConnection->Open(strConnection.GetBuffer(200), "", "", adModeUnknown);
strConnection.ReleaseBuffer();

// 访问Student表中所有的记录,并输出到屏幕上
pRecordset->Open("Select * From Student Where [Age] > 19", pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
pRecordset->MoveFirst();
while (pRecordset->EndOfFile == VARIANT_FALSE)
{
// 第一个字段
COleVariant vaHolder = pRecordset->GetCollect("Name");
if (vaHolder.vt != VT_NULL)
{
CString strName = (LPCWSTR)_bstr_t(vaHolder);
cout << strName.GetBuffer(50) << ", ";
strName.ReleaseBuffer();
}
vaHolder.Clear();

// 第二个字段
vaHolder = pRecordset->GetCollect("Age");
if (vaHolder.vt != VT_NULL)
{
int age = (int)vaHolder.intVal;
cout << age << endl;
}
vaHolder.Clear();

pRecordset->MoveNext();
}
pRecordset->Close();
}
catch (_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}

// 关闭记录集和连接对象
if (pRecordset->State)
pRecordset->Close();
if (pConnection->State)
pConnection->Close();

// 关闭COM库的支持
::CoUninitialize();
vcdata 2008-11-17
  • 打赏
  • 举报
回复
买书 名为 VISUAL C++数据库编程技术与事例 不错
yangsen2016 2008-11-14
  • 打赏
  • 举报
回复
一般用ADO
mrnian2008 2008-11-12
  • 打赏
  • 举报
回复
ado接口

http://hi.baidu.com/flly1/blog/item/98819ed1aad902d7572c8418.html
http://www.cnblogs.com/cy163/archive/2007/03/29/693369.html

看完上面两篇文章应该就没问题了
一篇理论,一篇例程
ypine 2008-11-05
  • 打赏
  • 举报
回复
找一个ado封装类
arthurlee 2008-11-04
  • 打赏
  • 举报
回复
1. 可以使用MFC提供的CDatabase、CRecordset等类库;
2. 可以使用ATL提供的CSession、CCommand等类库,基于OLEDB Consumer技术;
dirdirdir3 2008-11-04
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc/?id=307
  • 打赏
  • 举报
回复
偶一般使用odbc
闪破风浪 2008-11-04
  • 打赏
  • 举报
回复
《ADO开发指南》
内存泄漏 2008-11-04
  • 打赏
  • 举报
回复
参考下面的方法,是连接ACCESS的,如果连接SQL SERVER,把连接字符串修改一下就行了。。
http://www.vckbase.com/document/viewdoc/?id=1215
http://www.vckbase.com/document/viewdoc/?id=610
http://www.vckbase.com/document/viewdoc/?id=496
shakaqrj 2008-11-04
  • 打赏
  • 举报
回复
ado odbc oledb 等等都可以
路人乙2019 2008-11-04
  • 打赏
  • 举报
回复
最好用ADO,简单,不容易出错。

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧