如何在编程中调用OLEDB的数据连接属性对话框?

如何在编程中调用OLEDB的数据连接属性对话框?

原文作者:Tony Johnson and Chris Wilcock

译者的话:本文主要谈论了如何使用OLEDB的数据连接属性对话框(Data Link Properties),根据用户的选择,使用动态得到的连接字符串,配置ADO的数据源。

OLEDB的数据连接配置对话框如下图所示:

如何在编程中调用OLEDB的数据连接属性对话框?

程序编译环境:VC6, MDAC 2.1 ( ADO 2.1 ), Win9x / NT

介绍 Introduction

我最近在我的使用ADO应用程序中需要容许用户能够根据自己的需要配置一个连接串。搜索了最近的文档之后,发现没有任何关于怎样实现这个的信息。除了当从MDAC2.02.1过渡时,知识库中文章(Q225132)描述了一个使用#import声明的问题。这个刺激了我来写一篇文章来演示如何使你在你的应用程序中使用OLE DB的数据连接属性对话框。

这个数据连接对话框包含在OLEDB32.DLL(在MDAC2.1,MDAC2.1中在MSDASC.DLL)。他已经非常容易使用了。通过创建一个IdataSourceLocator接口实例,你就可以弹出这个对话框,并且快速的配置ADO数据源。

好了,让我们来看一看怎样实现他呢?我已经创建了一个简单的控制台程序工程,来演示如何做到这一点,在文章末,可以通过连接下载这个工程文件。

输入类型库 Importing the type libraries

首先,装入工程并打开一个源文件(datalink.cpp)。在这个源文件中,我已经很好的注释了其中的语句,因此你可以很容易的读懂它。但是那儿仍有些关键的点。

#import "c:/program files/common files/system/ado"
"/msado20.tlb" no_namespace rename("EOF", "IsEOF") 
rename("BOF", "IsBOF")
#import "c:/program files/common files/system/ole "
db/oledb32.dll" rename_namespace("oledb")

头文件顶端的#import声明语句将告诉编译器生成一些文件,以使得我们使用数据连接和ADO对象的智能指针。这些输入声明语句也容许我们使用ADO对象,最重要的是对于本文所说的数据连接属性对话框。

显示数据连接属性对话框 Displaying the Data Link Properties Dialog

main()函数包含了一些代码,这些代码的作用是让我们装入或者保存一个预定义的连接字符串。我假定你已经对于IO类很熟悉了,因此我将略过这个部分,这部分只是演示给你在显示这个数据连接属性对话框时使用预定义的连接字符串。

例如,如下的代码段告诉你怎样显示这个对话框,来创建一个新的连接字符串(错误检查已经被移除)

oledb::IDataSourceLocatorPtr p_IDSL = NULL;
 _ConnectionPtr p_conn = NULL;
 p_IDSL.CreateInstance( __uuidof( oledb::DataLinks ));
 p_conn = p_IDSL->PromptNew();

PromptNew函数的功能就是显示一个新的要求用户健入所有参数的对话框,在返回时,p_conn即可以是NULL,这是当用户点击了取消按钮,也可以是包含一个创建好的连接(Connection)对象,根据用户的选择,这个对象的数据成员ConnectionString被设定为ADO的连接字符串。

要显示一个基于已经存在的连接串,这个有点令人费解。下面是一个例子。

oledb::IDataSourceLocatorPtr p_IDSL = NULL;
_ConnectionPtr p_conn = NULL;
p_IDSL.CreateInstance( __uuidof( oledb::DataLinks ));
p_conn.CreateInstance( "ADODB.Connection" );
p_conn->ConnectionString = _bstr_t("your connection string");
IDispatch * p_Dispatch = NULL;
p_conn.QueryInterface( IID_IDispatch, (LPVOID*) & p_Dispatch );
p_IDSL->PromptEdit( &p_Dispatch );

p_Dispatch->Release();

可以编辑的版本需要另外的一些步骤。第一,你需要创建一个连接对象(Connection Object)并设定它的连接串,然后使用QueryInterface转化成一个IDispatch指针,最后传递到PromptEdit函数。

PromptEdit返回一个BOOL值,如果用户点击OK,那么返回TRUE,否则返回FALSE。如果是TRUE的话,p_conn对象的ConnectionString属性将被设定为新的用户定义的连接参数。

警告

我使用这些函数包括使用注册表来存贮和重新得到连接串。将这些函数增加到你的应用程序中,你就可以让用户能够容易的配置他们ADO的数据源。我希望他对你会有所帮助…他确实对我有帮助。

Downloads

Download source - 43 Kb