PersonalCorpus 版 (精华区)
发信人: hhong (真爱无痕), 信区: Database
标 题: 其实ADO很简单(续)
发信站: 紫 丁 香 (Fri Nov 19 20:25:29 1999), 转信
Update,Insert,Delete:
当我进行Update,Insert,Delete操作时,通常我喜欢用Connection和Command对象
,原因是,用CString来构造SQL语句简单一些,然后直接用Connection.Execute就行了
。当然,用Recordset干这些也是可以的。
Update方法有下面三种方法调用:
1: 给某个Field对象(或某些个)的Value属性赋值,然后调用Update方法;
2: 将字段名和字段值作为参数传给Update方法;
3: 将字段名和字段值的数组作为参数传给Update方法。
AddNew方法如下调用:
1: 直接调用,然后同Update调用方法一;
2: 将字段名数组、字段值数组作为参数传给AddNew方法。
Delete方法最简单,直接调用就行了,删除当前记录!
做完这些事情,可能需要调用Requery方法才能看到效果。
下面的示例代码需要我们创建一个简单的MFC Application,然后在CWinApp类里面
声明三个接口的对象:
// Global ADO Objects
// connection
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;
在VC6里面有一点很有意思,如果敲 "m_pConnection.",你会看到一个方法和属性
列表,如果敲"m_pConnection->",还会看到一个方法和属性列表,当然里面的内容完全
不同,因为你实际是在指向两个不同的东西。下面就是这两种混用的代码:
_ConnectionPtr MyDb;
MyDb.CreateInstance(__uuidof(Connection));
MyDb->Open("DSN=SAMS_SVR;UID=admin;PWD=admin","","",-1);
回到示例代码,在 application 的 InitInstance 方法里,我打开数据连接,指向我
机器上的一个数据库,你需要更改ConnectionString,使用你自己的ODBC数据源或指定
一个OLE DB provider。
// When we open the application we will open the ADO connection
m_pConnection.CreateInstance(__uuidof(Connection));
m_pConnection->Open("DSN=ADOTest","","",-1);
如果你打开about对话框,就会看到一个Listbox,还有一个叫button1的按钮,这里
面包含了 ADO 调用的核心代码。我创建了一个_RecordsetPtr接口的实例,打开我需要
的记录集,然后遍历所有记录,将它们塞到Listbox里去:
_variant_t TheValue;
theApp.m_pRecordset.CreateInstance(__uuidof(Recordset));
try
{
theApp.m_pRecordset->Open("SELECT DISTINCT FLDESC FROM tblFALines",
theApp.m_pConnection.GetInterfacePtr(),
adOpenDynamic,
adLockOptimistic,
adCmdText);
while(!theApp.m_pRecordset->adoEOF)
{
TheValue = theApp.m_pRecordset->GetCollect("FLDESC");
if(TheValue.vt!=VT_NULL)
m_List.AddString((char*)_bstr_t(TheValue));
theApp.m_pRecordset->MoveNext();
}
theApp.m_pRecordset->Close();
}
catch(_com_error *e)
{
CString Error = e->ErrorMessage();
AfxMessageBox(e->ErrorMessage());
}
catch(...)
{
MessageBox("Whoa this is bad");
}
记得一定要用try和catch,否则ADO调用错误有可能使你的程序崩溃,一定要随时记
得捕捉_com_error例外以及其它错误。
我尽可能的使代码简单,所以省略了很多细节,尤其是忽略了很多好的编程习惯(比
如检查大多数COM方法都返回的HRESULT值)。本文的目的是想说,ADO并没什么难的,CO
M也一样,而不是想表现ADO能做的所有事情。我甚至都没仔细想过ADO能为你带来什么,
不过我肯定一点,那就是ADO比DAO、RDO更快、更容易使用、并且功能强大得多。看看本
站点其它的文章,你就会知道,通过ADO调用存储过程有多么容易!
最后,我想向大家推荐两本书,其中有一本是完全免费的,在www.informit.com可
以找到电子版,另一本必须得付钱买了,不过我还是推荐两本都买,除非你家浴池里、
床头边也放了计算机。 :)
免费的那本是<Learn Database Programming with Visual C++ in 21 days>。哦,
我知道你在想什么,我也知道那些'in 21 days'的书通常都很烂,而且当着其它程序员
的面买这样的书的确有点丢面子,并且还很不好意思把这样的书摆在书架上显眼的位置
。不过这一本绝对是个例外!里面的内容简直太棒了!
要花钱的那本是<ADO 2.0>,由WROC出版... (译者注:细节就省了吧,反正我们也
不会花美元去买英文书)。
译者注:一年以前,我在www.mcp.com(现在已经更名为informit)看到这本书,看过
之后觉得实在是本难得一见的好书,不仅讲ADO深入浅出,COM的来历、基础、发展都说
得很清楚,还有不少C++的高级知识,这也是我看过的唯一一本“21天”的书,与其它的
“21天”简直是天壤之别。强烈建议大家买一本。
中译本:Visual C++ 数据库编程...(一时记不起了),清华大学出版社出版,清华
书店有卖,大家快去买啊!注意不要买机械工业出版社那本 VC 数据库编程的书,看起
来名字很象,不过内容烂得可以。
如果要看相关的文章,请访问站点www.codeguru.com,祝大家早日成为编程高手,
已经是高手的更加高!
--
※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: mlg.hit.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.561毫秒