将 Visual FoxPro 数据库添加到 SQL Server 作为链接服务器

本文介绍了如何以编程方式在 Visual FoxPro 中添加和查询 Visual FoxPro 数据源作为链接服务器。

原始产品版本:   Visual FoxPro
原始 KB 数:   199131

摘要

SQL Server 7.0 和 SQL Server 2000 允许将外部数据源添加为链接服务器。 此功能提供对 OLE DB 数据源的分发、异类查询的访问。 本文介绍如何以编程方式在 Visual FoxPro 中添加和查询 Visual FoxPro 数据源作为链接服务器。

更多信息

sp_addlinkedserver 是 SQL Server 7.0 和 SQL Server 2000 中引入的新存储过程。 sp_addlinkedserver 创建链接服务器,允许对 OLE DB 数据源进行分发和异类查询。

从 Transact-sql 中添加链接服务器的语法为:

 sp_addlinkedserver [@server =] 'server',
 [@srvproduct =] 'product_name',
 [@provider =] 'provider_name',
 [@datasrc =] 'data_source',
 [@location =] 'location',
 [@provstr =] 'provider_string',
 [@catalog =] 'catalog'[@server =] 'server' Is the name of the linked server to
 create with sp_addlinkedserver.

[@srvproduct =] 'product_name' Is the product name of the OLE DB data
 source to add as a linked server.

[@provider =] 'provider_name' Is the unique provider identifier of the
 OLE DB provider corresponding to the
 data source.

[@datasrc =] 'data_source' Is the name of the data source, as
 interpreted by the OLE DB provider.

[@location =] 'location' Is the location of or path to the
 database as interpreted by the OLE DB
 provider.

[@provstr =] 'provider_string' Is the OLE DB provider-specific.

[@catalog =] 'catalog' Is the catalog to be used when making a
 connection to the OLE DB provider.

下面的代码段将 Visual FoxPro 数据库 Testdata.DBC 从 SAMPLES\DATA 目录添加到 SQL server 作为链接服务器。 此代码段假定 Visual FoxPro 和 SQL Server 正在同一台计算机上运行。

备注

用户名和 用户名必须具有对数据库执行这些操作的权限。

 Source_Path=IIF(VAL(SUBSTR(VERSION(),15,2))=6,HOME(2),HOME()+"SAMPLES\")
 Connect_String='DRIVER={SQL Server};' + ;
 'SERVER=MY_SERVER;DATABASE=PUBS;UID=UserName;PWD=StrongPassword'
 gnConnHandle=SQLSTRINGCONN(Connect_String)
 IF gnConnHandle > 0
 * Create a command string to pass to SQL Server via SQLExec
 SQLCommand="sp_addlinkedserver 'VFP','','MSDASQL',NULL,NULL,"+ ;
 "'DRIVER={Microsoft Visual FoxPro Driver};" + ;
 "SourceDB="+Source_Path+"DATA\TESTDATA.DBC;SourceType=DBC;NULL'"* CREATE the LINKED Server"
 Create_Linked_Server=SQLExec(gnConnHandle,SQLCommand)
 IF Create_Linked_Server > 0
 * The linked server was successfully created
 * Run the query
 =RunQuery()
 ELSE
 * The Linked Server either already exists or the command failed.
 * Test for existence of linked server with aerror()
 =AERROR(s_failed)
 IF "VFP' ALREADY EXISTS."$UPPER(s_failed[1,2])
 * The linked server exists, so run the query
 =RunQuery()
 ELSE
 * The linked server doesn't exist, so display a message
 =MESSAGEBOX(s_failed[1,2],32,'Failed')
 ENDIF
 ENDIF
 =SQLDISCONN(gnConnHandle)
 ENDIF

PROCEDURE RunQuery
 SQLCommand="SELECT * FROM OPENQUERY(VFP,'SELECT * FROM CUSTOMER')"
 QRYVal=SQLExec(gnConnHandle,SQLCommand,'SQLRESULTS')
 IF QRYVal > 0
 SELECT SQLResults
 BROW
 ELSE
 =AERROR(L_Server)
 =MESSAGEBOX(L_Server[1,2],32,'Query Failed')
 ENDIF
 RETURN

运行代码段后,打开 SQL Server 企业管理器并展开 "链接服务器" 节点。 已添加名为 "VFP" 的链接服务器。

参考

有关的详细信息 sp_addlinkedserver ,请 sp_addlinkedserver 在 Transact-sql 参考帮助文件中搜索。