博文
Microsoft ADO 程序员参考(2007-08-27 09:36:00)
摘要:http://www.eduboss.com/pages/ado/?url=/pages/ado/mdprobof.htm
Microsoft ADO 程序员参考
目录
Microsoft® ActiveX® Data Objects (ADO) 使您能够编写通过 OLE DB 提供者对在数据库服务器中的数据进行访问和操作的应用程序。其主要优点是易于使用、高速度、低内存支出和占用磁盘空间较少。ADO 支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。
ADO 同时具有远程数据服务 (RDS) 功能,通过 RDS 可以在一次往返过程中实现将数据从服务器移动到客户端应用程序或 Web 页、在客户端对数据进行处理然后将更新结果返回服务器的操作。RDS 以前的版本是 Microsoft Remote Data Service 1.5,现在,RDS 已经与 ADO 编程模型合并,以便简化客户端数据的远程操作。
有关 ADO 及 RDS 如何与之集成的详细信息,请参阅 ADO 入门。......
直接通过ADO操作Access数据库(2007-08-27 09:27:00)
摘要:
直接通过ADO操作Access数据库
作者/徐景周
下载源代码
我在《VC知识库在线杂志》第十四期和第十五期上曾发表了两篇文章——“直接通过ODBC读、写Excel表格文件”和“直接通过DAO读、写Access文件”,先后给大家介绍了ODBC和DAO两种数据库访问技术的基本使用方法,这次要给大家介绍的是ADO数据库访问技术的使用方法。ADO(Active Data Object,活动数据对象)实际上是一种基于COM(组件对象模型)的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。让我们直接步入主题:如何掌握ADO这种数据库访问技术。ADO 的操作方法和前面讲过的DAO的操作在很多方面存在相似之处,在这里,笔者为了更有效的说明它的使用方法,用VC6.0做了一个示例程序—— AdoRWAccess,这个示例程序可以直接通过ADO来操作Access数据库,示例程序的运行效果如下图所示:
在示例程序中我们仍采用原库结构,数据库名Demo.mdb,库内表名DemoTable,表内字段名为Name(姓名)和Age(年龄)的两个字段,来构造示例程序操作所需的Access数据库,这也和上两篇文章的示例源码中的库结构相兼容。
下面让我们看看ADO数据库访问技术使用的基本步骤及方法:
首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中......
在Visual C++中用ADO进行数据库编程(2007-08-27 09:23:00)
摘要:
在Visual C++中用ADO进行数据库编程
由 wnchg 整理
1. 生成应用程序框架并初始化OLE/COM库环境
创建一个标准的MFC AppWizard(exe)应用程序,然后在使用ADO数据库的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。
本例为:
BOOL CAdotestDlg::OnInitDialog()
{
::CoInitialize(NULL); //初始化OLE/COM库环境
}
程序最后要调用 ::CoUninitialize();//释放程序占用的COM 资源。
另外:
m_pRecordset->Close(); 注意!!!不要多次关闭!!!!!!!!!!!!
m_pConnection->Close();
m_pRecordset = NULL;
m_pConnection = NULL;
2. 引入ADO库文件
使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C++使用的COM vtable接口。当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。
程序的第三行指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第......
Visual C++ ADO数据库编程入门(2007-08-24 16:55:00)
摘要:摘要 本文简要介绍了在VC++ 6.0中使用 ADO进行客户端数据库编程的基本步骤,以及常见问题的解决方法,可供入门级的参考之用。
http://www.yesky.com/413/1839913.shtml
共8页。 1 2 3 4 5 6 7 8 8 :......
VC数据库编程技术应用(2007-08-24 13:37:00)
摘要:您正在看的VC教程是:VC数据库编程技术应用。ADO C++ Extensions
实际上,如果你是用C++进行应用程序开发的话,就应该使用ADO C++ Extensions。我们知道,在VB或者用VBScript来操作ADO的话,是非常方便的,但是如果使用C/C++或者是Java的话,就必须要处理类似VARIANTs这样的数据结构,实现和C++数据结构的转换,而这个无疑是所有C++开发人员都很头疼的事情。但如果你使用C++扩展的话, ADO不需要从数据提供者处得到列信息。ADO在设计时刻使用开发人员提供的列信息。以下是一个简单的示例:
file://创建和具体记录相对应的类
class CAuthor : public CADORecordBinding
{
BEGIN_ADO_BINDING(CCustomRs1)
ADO_VARIABLE_LENGTH_ENTRY4(1, adVarChar, m_szau_id, sizeof(m_szau_id), FALSE)
ADO_VARIABLE_LENGTH_ENTRY4(2,adVarChar,m_szau_fname,sizeof(m_szau_fname), FALSE)
ADO_VARIABLE_LENGTH_ENTRY4(3,adVarChar,m_szau_lname,sizeof(m_szau_lname), FALSE)
END_ADO_BINDING()
protected:
char m_szau_id[12];
char m_szau_fname[21];
char m_szau_lname[41];
};
void FetchAuthorData()
{
CAuthor author;
_RecordsetPtr pRs; file://记录集对象
IADORecordBinding *piAdoRecordBinding;
<......
VC数据库编程(2007-08-24 13:33:00)
摘要:在使用VC开发应用软件的时候,经常需要进行数据库操作,可是VC操作数据库实在比较麻烦,而VB编制数据库软件却十分方便快捷,有什么办法可以让VC编制数据库软件也这么轻松呢?
在工作中,本人需要从串口接收数据并保存到数据库中,如果直接由VC调用ADO组件进行数据库访问、操作,比较麻烦,因此我想利用VB使用ADO组件的方便以及微软的COM接口由VC调用VB完成任务,经过资料查找,发现大部分都是关于如何使用VC制作控件或者DLL后从VB进行调用的,很少关于VB制作ACTIVEX DLL由VC进行调用的文章,在此本人将结合实例说明如何用VB制作一个操作数据库的ACTIVEX DLL,再在VC调用该DLL,从而使得VC方便的使用ADO技术操作数据库。
一、 制作VB数据库访问ACTIVEX DLL
1、首先使用VB6.0创建一个心得ACTIVEX DLL工程,将工程命名为prjado、将类命名为clsado。
2、为工程添加ADO对象库的引用。工程->引用:Microsoft ActiveX Data Objects2.0 Library
3、为类增加两个新的变量:
Dim con As New ADODB.Connection '定义ADO会话连接对象
Dim cmd As New ADODB.Command '定义ADO命令对象
4、增加初始化函数
Public Function ado_Init()
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=True;Data Source=sms.mdb"
cmd.ActiveConnection = con
End Function
建立到数据源的物理连接
指定Command对象当前所属的 Connection 对象。
5、数据库操作函数
Public Function ado_add(ByVal strdata As String)
cmd.CommandText = "insert into ......
WSAAsyncSelect模型(2007-08-21 16:51:00)
摘要:
Winsock提供了一个有用的异步I / O模型。利用这个模型,应用程序可在一个套接字上, 接收以Windows消息为基础的网络事件通知。具体的做法是在建好一个套接字后,调用 WSAAsyncSelect函数。
异步通知,但不提供异步数据传送。异步数据传送有“重叠及完成端口模型提供”。
要想使用WSAAsyncSelect模型,在应用程序中,首先必须用CreateWindow函数创建一个窗口,再为该窗口提供一个窗口例程支持函数( Winproc)。亦可使用一个对话框,为其提供一个对话例程,而非窗口例程,因为对话框本质也是“窗口”。
int WSAAsyncSelect (
SOCKET s, //要进行操作的SOCKET
HWND hWnd, //要绑写的窗口句柄(当事件发生后要接收消息的窗口)
unsigned int wMsg, //网络事件发生时的的消息响应
long lEvent //感兴趣的网络事件,请查阅MSDN
);
使用方法可分为:
(1)初始化套接字相关信息:
(2) 开始启动一个事件通知。WSAAsyncSelect(Sock, hWnd, 自定义消息, 网络事件)
(3) 响应窗口的自定义消息处理函数, 其中lparam的高位字包含了可能出现的错误
代码,低字节表示发生的网络事件。wParam表示发生网络事件的套接字。
WSAGETSELECTERROR(lParam); //查看是否出现错误,获取低字节位
WSAGETSELECTEVENT(lParam); //查看发生了什么事件,获取高字节位
事件种类请查看MSDN,可用WSAGetLastError()来获取错误信息。
注意:多个事件必须一次注册完成,closesocketWSAAsyncSelect
优点:可在系统开销不大的情况下同时处理许多连接。
缺点:即使用不需要窗口(如服务器,控制台)它也不得不额外使用一个窗口。同时如果处理成千上万套接字的所有事件,性能可想而知。
MFC的CSocke......
简单的Socket服务客户端(2007-08-21 14:52:00)
摘要:有阻塞的程序,部分,不好意思
=============================================server
void CSeverClientDlg::OnButton_ThreadOn()
{
UpdateData(true);//刷新端口
if(m_edit_Port=="")
{
AfxMessageBox("请输入端口");
}
else
{
port=atoi(m_edit_Port);
deal();
}
}
void CSeverClientDlg::deal()
{
CString linkPort="["+m_edit_Port+"]";
CString nowPing;
if(IsListening==true)
{
AfxMessageBox("已经在监听");
}
else
{
ServerSocket=socket(AF_INET,SOCK_STREAM,0);
ClientSocket=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in ServerAddr;
if( ClientSocket == -1 )
{
AfxMessageBox( "accept调用失败!\n" );
exit( 0 );
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(port);//监视的端口号2008
ServerAddr.sin_addr.s_addr = htonl(INAD......
基于Visual C++的Winsock API研究 (2007-08-21 11:27:00)
摘要: 基于Visual C++的Winsock API研究
为了方便网络编程,90年代初,由Microsoft联合了其他几家公司共同制定了一套WINDOWS下的网络编程接口,即Windows Sockets规范,它不是一种网络协议,而是一套开放的、支持多种协议的Windows下的网络编程接口。现在的Winsock已经基本上实现了与协议无关,你可以使用Winsock来调用多种协议的功能,但较常使用的是TCP/IP协议。Socket实际在计算机中提供了一个通信端口,可以通过这个端口与任何一个具有Socket接口的计算机通信。应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。
微软为VC定义了 Winsock类如CAsyncSocket类和派生于CAsyncSocket 的CSocket类,它们简单易用,读者朋友当然可以使用这些类来实现自己的网络程序,但是为了更好的了解Winsock API编程技术,我们这里探讨怎样使用底层的API函数实现简单的 Winsock 网络应用程式设计,分别说明如何在Server端和Client端操作Socket,实现基于TCP/IP的数据传送,最后给出相关的源代码。
在VC中进行WINSOCK的API编程开发的时候,需要在项目中使用下面三个文件,否则会出现编译错误。
1.WINSOCK.H: 这是WINSOCK API的头文件,需要包含在项目中。
2.WSOCK32.LIB: WINSOCK API连接库文件。在使用中,一定要把它作为项目的非缺省的连接库包含到项目文件中去。
3.WINSOCK.DLL: WINSOCK的动态连接库,位于WINDOWS的安装目录下。
一、服务器端操作 socket(套接字)
1)在初始化阶段调用WSAStartup()
此函数在应用程序中初始化Windows Sockets DLL ,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL中的API函数。在程式中调用该函数的形式如下:WSAStartup((WORD)((1<<8|1),(LPWSADATA) &WSAData),其中(1<<8......
Windows Socket API 运用心得体会(2007-08-21 10:52:00)
摘要: 本文是我在进行MS-Windows、HP-Unix网络编程的实践过程中总结出来的一些经验,仅供大家参考。本文所谈到的Socket函数如果没有特别说明,都是指的Windows Socket API。
一、WSAStartup函数
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。
例:假如一个程序要使用2.1版本的Socket,那么程序代码如下
wVersionRequested = MAKEWORD( 2, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
二、WSACleanup函数
int WSACleanup (void);
应用程序在完成对请求的Socket库的使用后,要调用WSACleanup函数来解除与Socket库的绑定并且释放Socket库......