【网学网提醒】:网学会员,鉴于大家对vc++sql十分关注,会员在此为大家搜集整理了“vc++sql”一文,供大家参考学习!
请问,如何在VC++中将VC对话框程序与SQLServer2000数据库相连,也就是说,每当我在对话框中输入相应的纪录,然后点击对话框中的保存按钮,系统自动把我的纪录保存到制定的SQLServer2000数据库中!!
对我有用[0]丢个板砖[0]引用举报管理TOP回复次数:12
ohfox
(ohfox)
等级:
#1楼得分:0回复于:2005-08-0811:02:25用Recordset类和数据库联接阿
对我有用[0]丢个板砖[0]引用举报管理TOP
VCSQLVB
(深谷清音(谁知还是难脱俗尘))
等级:
#2楼得分:0回复于:2005-08-0811:05:11m_cn->Open((_bstr_t)("Provider=SQLOLEDB;DataSource="+dserver+";InitialCatalog="+dbase+";uid="+uid+";pwd="+pwd+";"),"","",NULL);
对我有用[0]丢个板砖[0]引用举报管理TOP
humourHM
(小鬼)
等级:
#3楼得分:30回复于:2005-08-0811:17:51使用ADO访问数据库
VC可使用的数据库编程接口包括:ODBCAPI、MFCODBC、ADO、DAO、RDO和DB-Library等。这些技术各有自己的优缺点,它们都提供了简单、灵活、访问速度快、可扩展性好的开发技术。传统的ODBC技术只能访问关系数据库,并且访问数据库的速度慢。而OLEDB访问技术,不仅可以访问关系型数据库,还可以访问非关系型数据库,同时由于OLEDB是基于COM接口的技术,使用这种技术可以直接对数据库的驱动程序进行访问,从而大大提供了访问速度。
ADO(ActiveXDataObject的简称)是Microsoft为最新和最强大的数据访问范例OLEDB而设计的,是一个便于使用的应用程序层接口。ADO通过OLEDB提供访问和操作数据库服务器中的数据。ADO最主要的优点是易于使用、速度快、内存支出少和磁盘遗迹小。
这里提供了使用ADO访问数据库的简单代码,供初学者参考。代码中涉及到了SQL语法,但不属于ADO所讨论的范围,相关内容见《SQL语法基础》。以下代码更改过一次,使得内容更完善,只需稍加修改可成为一个类。
·使用ADO访问数据库的简单实例:
//使用ADO前必须在工程的stdafx.h文件最后直接使用#import引入ADO库文件:
#import"c:\programfiles\commonfiles\system\ado\msado15.dll"
no_namespacerename("EOF","adoEOF")
//以上路径应视实际情况而定;为了避免常数冲突,将常数EOF改名为adoEOF。
//在CWinApp::InitInstance()的重载函数中初始化OLE库:
if(!AfxOleInit())
{
//初始化OLE库失败
}
/*********************************************************************************************
ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。
_ConnectionPtr通常
被用来创建一个数据连接或执行一条不返回任何结果的SQL语句。
_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。
_RecordsetPtr是一个记录集对象。它对记录集提供了更多的控制功能,如记录锁定、游标控制等。
*********************************************************************************************/
//定义变量:
public:
_ConnectionPtrm_pConnection;
_RecordsetPtrm_pRecordset;
//初始化:
//创建Connection对象
HRESULThr;
hr=m_pConnection.CreateInstance("ADODB.Connection");
if(!SUCCEEDED(hr))
{
//创建Connection对象失败
}
//创建Recordset对象
hr=m_pRecordset.CreateInstance("ADODB.Recordset");
if(!SUCCEEDED(hr))
{
//创建Recordset对象失败
}
//m_pConnection.CreateInstance(__uuidof(Connection));
//m_pRecordset.CreateInstance(__uuidof(Recordset));
//打开Access2000数据库
BOOLOpen(CStringDBName)
{
CStringstrData;
strData="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+DBName;
//对于ACCESS2000,Provider=Microsoft.Jet.OLEDB.4.0;
//对于ACCESS97,Provider=Microsoft.Jet.OLEDB.3.51;
try
{
m_pConnection->Open(_bstr_t(strData),"","",adModeUnknown);
/******************************************************************************
函数:HRESULTConnection15::Open(_bstr_tConnectionString,_bstr_tUserID,
_bstr_tPassword,longOptions)
ConnectionString:连接字串;
UserID:用户名;
Password:登陆密码;
Options:连接选项,用于指定Connection对象对数据的更新许可权:
adModeUnknown:缺省。当前的许可权未设置
adModeRead:只读
adModeWrite:只写
adModeReadWrite:可以读写
adModeShareDenyRead:阻止其它Connection对象以读权限打开连接
adModeShareDenyWrite:阻止其它Connection对象以写权限打开连接
adModeShareExclusive:阻止其它Connection对象打开连接
adModeShareDenyNone:允许其它程序或对象以任何权限建立连接
******************************************************************************/
}
catch(_com_errore)
{
AfxMessageBox(e.ErrorMessage());
returnFALSE;
}
returnTRUE;
}
//查询
BOOLLocating(CStringSqlCommand)
{
//参数形式:
//SELECT*FROMTableName[WHEREField1=Value1][ANDField2>Value2][...]
if(!m_pConnection->State)
{
returnFALSE;
}
if(m_pRecordset->State)
{
m_pRecordset->Close();
}
try
{
m_pRecordset->Open((_bstr_t)SqlCommand,m_pConnection.GetInterfacePtr(),
adOpenDyna
mic,adLockOptimistic,adCmdText);
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
returnFALSE;
}
returnTRUE;
}
//统计纪录数
longGetCount(CStringSqlCommand)
{
//参数形式:
//SELECTCOUNT(*)FROMTableName[WHEREField1=Value1][ANDField2=Value2][...]
_variant_tvNULL;
_RecordsetPtrpRecordset;
pRecordset=m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
_variant_tvCount=pRecordset->GetCollect((_variant_t)(long)0);
pRecordset->Close();
pRecordset.Release();
returnvCount.lVal;
}
//从数据库读取数据
BOOLReadData()
{
_variant_tvar;
try
{
if(!m_pRecordset->BOF)
m_pRecordset->MoveFirst();
else
//数据库为空纪录
returnFALSE;
while(!m_pRecordset->adoEOF)
{
//获取指定字段的值,以字段名为Name为例:
var=m_pRecordset->GetCollect("Name");
if(var.vt!=VT_NULL)
//(LPCSTR)_bstr_t(var)就是该字段的值
m_pRecordset->MoveNext();
}
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
returnFALSE;
}
returnTRUE;
}
对我有用[0]丢个板砖[0]引用举报管理TOP
humourHM
(小鬼)
等级:
#4楼得分:20回复于:2005-08-0811:18:39//修改纪录有以下两种方式:
voidModify()
{
//先移动到指定位置
//以将字段Name改为“帝王”为例:
m_pRecordset->PutCollect("Name",_variant_t("帝王"));
//……
m_pRecordset->Update();
}
BOOLModify(CStringSqlCommand)
{
//参数形式:
//UPDATETableNameSET[Field1=Value1][,Field2=Value2][...]
//[WHEREField1=Value1][ANDField2=Value2][...]
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//添加纪录也有以下两种方式:
BOOLAdd()
{
m_pRecordset->MoveLast();
m_pRecordset->AddNew();
try
{
//以添加Name为“帝王”的纪录为例:
m_pRecordset->PutCollect("Name",_variant_t("帝王"));
//……
m_pRecordset->Update();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
returnFALSE;
}
returnTRUE;
}
BOOLAdd(CStringSqlCommand)
{
//参数形式:
//INSERTINTOTableName(Field1,Field2,...)VALUES(Value1,Value2,...)
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//删除纪录也有以下两种方式:
BOOLDelete
(longlIndex)
{
//删除第lIndex条纪录
try
{
m_pRecordset->MoveFirst();
m_pRecordset->Move(lIndex);
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->Update();
}
catch(_com_error*e)
{
AfxMessageBox(e->ErrorMessage());
returnFALSE;
}
returnTRUE;
}
BOOLDelete(CStringSqlCommand)
{
//参数形式:
//DELETEFROMTableNameWHEREField1=Value1[ANDField2=Value2][...]
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//添加表
BOOLAddTable(CStringSqlCommand)
{
//参数形式:
//CREATETABLETableName(Field1[Type1],[Field2[Type2]][...])
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//删除表
BOOLDeleteTable(CStringSqlCommand)
{
//参数形式:
//DROPTABLETablename
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//添加字段
BOOLAddField(CStringSqlCommand)
{
//参数形式:
//ALTERTABLETableNameADDField[Type]
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//删除字段
BOOLDeleteField(CStringSqlCommand)
{
//参数形式:
//ALTERTABLETableNameDROPField
_variant_tvNULL;
if(!m_pConnection->State)
{
//数据库未打开
returnFALSE;
}
m_pConnection->Execute((_bstr_t)SqlCommand,&;vNULL,adCmdText);
returnTRUE;
}
//关闭记录集
voidCloseRecord()
{
if(m_pRecordset->State)
{
m_pRecordset->Close();
m_pRecordset.Release();
}
}
//关闭数据库
voidClose()
{
if(m_pConnection->State)
{
m_pConnection->Close();
m_pConnection.Release();
}
}