source是指数据库所在的服务器地址。
server=localhostuid=testpwd=testdatabase=Northwind
这个就是连接字符串的写法。
要是你比较懒的话就在桌面上建一个文本文档。把文件后缀名改成udl
双击打开。
在提供程序里选一个数据库类型
在连接里第一个写数据库地址。使用指定的id和pass,填完之后勾上允许保存密码。
然后在服务器上选择你要的数据库。
确定
关掉
用记事本打开这个文件。会有这样的东西
[oledb]
Everything
after
this
line
is
an
OLE
DB
initstring
Provider=SQLOLEDB.1Password=testPersist
Security
Info=TrueUser
ID=testInitial
Catalog=NorthwindData
Source=localhost
如果你在程序里指定了数据库类型的话就从Password开始粘贴到最后。没指定就从Provider开始。
一、初始化首先,在stdafx.h文件中加入:
#import "C:\Program files\common files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")
定义变量
_ConnectionPtr ADOConn
_RecordsetPtr m_pADOSet
二、连接
//SQL SERVER数据库连接
::CoInitialize(NULL)
CString strConnect
strConnect="Provider=sqloledb.1Data Source=192.168.0.131Initial Catalog=mynetUID=saIntegrated Security=SSPI"
//mynet数据库名字,我使用的是非数据源方式
try
{
ADOConn.CreateInstance(__uuidof(Connection))
ADOConn->Open((const char *)strConnect,"","",adModeUnknown)//adConnectUnspecified
}
catch(...)
{
AfxMessageBox("数据库初始化错误,程序将关闭!")
return FALSE
}
三、初始化ADO记录集
m_pADOSet.CreateInstance(__uuidof(Recordset))
_variant_t strSQL
strSQL="select * from kk"
if ( m_pADOSet->State == adStateOpen)
m_pADOSet->Close()
try
{
m_pADOSet->CursorLocation=adUseClient
m_pADOSet->Open("select * from kk", ADOConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdUnknown)
}
catch(_com_error &e)
{
CString err
err.Format("ADO Error: %s",(char*)e.Description())
}
int iCount
iCount = m_pADOSet->GetRecordCount()
四、查询数据
_variant_t Holder
int T0
while(!m_pADOSet->EndOfFile)
{
Holder = m_pADOSet->GetCollect("id")
//if(Holder.intVal!=VT_NULL)
T0=Holder.intVal
m_pADOSet->MoveNext()
}
五、添加数据
m_pADOSet->AddNew()
m_pADOSet->PutCollect("id",_variant_t("23"))
m_pADOSet->PutCollect("username",_variant_t("salkfj"))
m_pADOSet->Update()
六、修改数据
m_pADOSet->EditMode
m_pADOSet->PutCollect("id",_variant_t("3"))
m_pADOSet->PutCollect("username",_variant_t("saj123456789"))
m_pADOSet->Update()
七、删除数据
m_pADOSet->Delete(adAffectCurrent)//删除当前记录
八、断开数据库
//释放ADO连接对象
if(adStateOpen == ADOConn->State)
ADOConn->Close()
ADOConn.Release()
// 释放ADO记录集
if(adStateOpen==m_pADOSet->State)
m_pADOSet->Close()
m_pADOSet.Release()
先照下面这个教程的前两步设置好,然后就能调用_ConnectionPtr、_RecordsetPtr和_CommandPtr三个指针。
http://wenku.baidu.com/view/396ffb87d4d8d15abe234e71.html
_ConnectionPtr是用来建立连接的;_RecordsetPtr是用来对数据库记录集进行 *** 作的,记录集说白了就是数据库的一个小的副本,你不能直接 *** 作数据库,所有的 *** 作都是对记录集 *** 作,然后更新,就反应到数据库上边了;_CommandPtr还没用过,一般前两个就够了。
这几个指针虽然还算方便,但是比较繁琐的,我从一本书上找到了几个类将这几个指针重新封装了一下,使用起来更方便了。这本书是《多层结构的数据库应用系统的开发:VC6.0+CSocket+ADO+SQL server 》,书里讲的更详细。
下面是我写的一个例子,不太好,你就参考一下吧。
头文件.h
CSbtAdoCnn m_AdoCnn //_ConnectionPtr的封装
CSbtAdoRst m_AdoRst //_RecordsetPtr的封装
源文件.cpp
//数据库 *** 作
CString strSource = m_AdoExc.GetStrSource() //连接字符串获取,可以直接写,后边那个函数请忽视
CString strUser = m_AdoExc.GetStrUser() //用户名获取
CString strPwd = m_AdoExc.GetStrPwd() //密码获取
CString strSQL //SQL命令,决定了打开什么样的记录集
CSbtStrArr m_FieldValues //CSbtStrArr是将CStringArray重新封装的一个类,m_FieldValues用存记录集的一行数据
m_AdoCnn.Open(strSource, strUser, strPwd) //先建立连接
strSQL = "SELECT * FROM mydatabase"
m_AdoRst.Open( //这几个参数参见CSbtAdoRst里的说明
m_AdoCnn.GetCnnPtr(),
strSQL,
adOpenStatic,
adLockOptimistic,
adCmdText)
m_AdoRst.MoveFirst() //移到ado记录集第一行
while(!m_AdoRst.IsEOF())
{
m_AdoRst.GetFieldsValue(m_FieldValues) //取得一行记录
//------------------------------------------
//你的 *** 作
//==========================
m_AdoRst.MoveNext() //移到下一行
}
m_AdoRst.Close()
m_AdoCnn.Close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)