📄 sqlserver实例-1.htm
字号:
<body bgcolor="#000000">
<P class=boe_head2><font color="#009900">连接-Connections</font></P>
<P class=boe_text><font color="#FFFFFF">使用远程视图操作远程数据的第一步就是建立与远程数据源的通讯,这里有好几种方法可供选择,请注意所有这些方法都使用
ODBC 与远程数据连接。</font></P>
<P class=boe_text><font color="#FFFFFF">这里有一个非常简单的远程视图,它的作用是:读取 Northwind 数据库中
Customers 表的记录到远程视图 Vcustomers 中。</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW Vcustomers ;<BR>
REMOTE CONNECTION Northwind ;<BR>
AS SELECT * From Customers<BR>
*先别试用这条语句,因为连接还没有建立</font></P>
<P class=boe_text><font color="#FFFFFF">在上述命令的第二行我们告诉Visual FoxPro使用连接 Northwind
与 SQL Server 通讯。在运行上面的语句时,Visual FoxPro将在两个地方寻找这个连接:</font></P>
<TABLE width="73%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC"> <LI>
<P class=boe_list><font color="#000000">当前 数据库容器(DBC)中查看是否存在数据库“连接对象”——Northwind。笔者称之为基于
DSN 的连接对象。 </font></P>
<LI>
<P class=boe_list><font color="#000000">如果没有发现,Visual FoxPro将在客户机的 OCBC
Data Source Names(DSNs)中查看是否存在连接 Northwind。笔者称之为 DSN 连接。 </font></P>
</LI>
<font color="#000000"></OL> </DIV></font></TD>
</TR>
</TBODY>
</TABLE>
<P class=boe_text><font color="#FFFFFF"> </font></P>
<P class=boe_head3><font color="#FFFFFF">建立 DSNs 连接</font></P>
<P class=boe_text><font color="#FFFFFF">建立连接的最快、最方便的方法是建立DSNs,您可以在控制面板中打开 ODBC
控制器,如图1。</font></P>
<P class=boe_text><font color="#FFFFFF"><IMG height=369 src="SQLSERVER实例-1.files/cs_1.jpg" width=441
border=0></font></P>
<P class=boe_text><font color="#FFFFFF"><B><SPAN lang=EN-US
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">图
1. ODBC Data Source Administrator 面板</SPAN></B></font></P>
<P class=boe_text><font color="#FFFFFF">我们发现有三种DSN 连接:</font></P>
<P class=boe_text><font color="#FFFFFF">用户型DSN、系统型DSN、文件型DSN。其中用户型只对建立它的用户有效,譬如你以
Administrator 的身份登录系统并建立了一个用户DSN,那么除非你以 Administrator 登录系统否则你不能使用这一DSN;系统型则对当前用机器所有用户生效,无论你以什么身份登录系统;文件型DSN实际上是一个以DSN为后缀名的文本文件。从
Visual FoxPro 的角度,笔者把这三种 DSN 分成两类:</font></P>
<TABLE width="74%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<LI>
<P class=boe_list><font color="#000000">用户型、系统型 DSN。它可以单独作为连接为远程视图使用;也可以作为“基于
DSN 连接对象”的基础,“基于 DSN 连接对象”依赖于用户型或是系统型 DSN。 </font></P>
<LI>
<P class=boe_list><font color="#000000">文件型 DSN。它不可以单独作为连接为远程视图使用;它可以为设计“基于字符串的连接对象”提供资料,但“基于字符串的连接对象”不依赖于文件型
DSN。 </font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P class=boe_text><font color="#FFFFFF">我们先建立一个系统型 DSN。</font></P>
<P class=boe_text><font color="#FFFFFF">在 ODBC Data Source Administrator 面板中选中
“System DSN”页,按“Add”键,再选择 SQL Server 驱动程序,按“完成”按钮。出现图2。</font></P>
<P class=boe_text><font color="#FFFFFF"><IMG height=349 src="SQLSERVER实例-1.files/cs_2.jpg" width=510
border=0></font></P>
<P class=boe_text><font color="#FFFFFF"><B><SPAN lang=EN-US
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">图
2. 设定 DSN 的名称及服务器</SPAN></B></font></P>
<P
class=boe_text><font color="#FFFFFF">这里我们选择“(local)”,注意如果系统将尝试连接目标服务器如果无法连接将报错,如果顺利的话您将看到图3的画面,要求选择用户认证方式,这里我们选择
SQL Server 与 Windows 混合认证方式,并输入登录SQL Server的用户名:“sa”,口令为空。</font></P>
<P class=boe_text><font color="#FFFFFF"><IMG height=349 src="SQLSERVER实例-1.files/cs_3.jpg" width=510
border=0></font></P>
<P class=boe_text><font color="#FFFFFF"><B><SPAN lang=EN-US
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">图
3. 设定 DSN 的登录信息</SPAN></B></font></P>
<P class=boe_text><font color="#FFFFFF">如果顺利画面4将出现在屏幕上,这里有一个选项要特别的注意,就是选择目标数据库。这里我们当然是选“</font></P>
<P class=boe_text><font color="#FFFFFF">Northwind”。</font></P>
<P class=boe_text><font color="#FFFFFF"><IMG height=349 src="SQLSERVER实例-1.files/cs_4.jpg" width=510
border=0></font></P>
<P class=boe_text><font color="#FFFFFF"><B><SPAN lang=EN-US
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Verdana; mso-fareast-font-family: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">图
4. 设定 DSN 的登录数据库</SPAN></B></font></P>
<P class=boe_text><font color="#FFFFFF">废话就不多说了,如果一些顺利,这条叫“Northwind”的System DSN
就建成了。</font></P>
<P class=boe_text><font color="#FFFFFF">在Visual FoxPro的命令窗口中建立如下语句:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE DATABASE Northwind<BR>
*建立本地数据库容器,存储数据库对象。<BR>
CREATE SQL VIEW VCustomers ;<BR>
REMOTE CONNECTION Northwind ;<BR>
AS SELECT * FROM Customers<BR>
*建立远程视图,注意这个视图是数据库(DBC)的一个对象,所以必须先建立DBC<BR>
USE VCustomers<BR>
*打开远程视图<BR>
BROWSE<BR>
*浏览远程视图</font></P>
<P class=boe_head3><font color="#FFFFFF">建立数据库容器(DBC)中的“连接对象”</font></P>
<P class=boe_text><font color="#FFFFFF">记得在前文我们讲过连接可以存在于两个地方,就是 DSNs 与 DBC,那么
DSN 与基于 DSN 的连接对象有什么区别?</font></P>
<P class=boe_text><font color="#FFFFFF">基于 DSN 的连接对象可以为数个远程视图共享,而 DSN 连接不可以。我们知道,每一条与
SQL Server的连接都是要收费的,共享连接就可以省钱;我们还知道,SQL Server管理每条连接大约要花去 24K 的内存空间,有人讲:24K不多,但您别忘了SQL
Server 是服务器,不只是您一个人使用它——东一条连接、西一条连接——系统效率一定会受影响。因此无论从开发成本还是系统工作效率的角度,共享连接都是开发人员必然的选择。 </font></P>
<P class=boe_text><font color="#FFFFFF">为了说明什么是共享连接,为了证明 DSN 连接不能为试图共享,我们做以下试验:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE SQL VIEW VOrders ;<BR>
REMOTE CONNECTION Northwind SHARE;<BR>
AS SELECT * FROM Orders<BR>
*新建一个远程视图,仍然使用名称为Northwind 的DSN连接<BR>
DBSETPROP('VCustomers', 'View', 'ShareConnection', .T.)<BR>
USE VCustomers IN 0<BR>
*打开刚才的那个视图<BR>
USE VOrders IN 0<BR>
*打开新建的远程视图<BR>
?CURSORGETPROP("ConnectHandle", "VCustomers")<BR>
*显示 1<BR>
?CURSORGETPROP("ConnectHandle", "VOrders")<BR>
*显示 2<BR>
*这两个远程视图(光标)的连接句柄不是同一个。如果一条连接被共享了,那么这两个光标的连接句柄应是同一个数字;这两个视图虽然使用同一个 DSN 但实际上它们没有共享连接。</font></P>
<P class=boe_text><font color="#FFFFFF">为了使用共享连接着一特性,我们建立“基于 DSN 的 连接对象”:</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE CONNECTION Northwind DATASOURCE
Northwind</font></P>
<P
class=boe_text><font color="#FFFFFF">以上这条连接是建立在上面我们建立的DSN连接之上的,连接成为数据库容器的一个对象了。但注意:这种连接对象并不能摆脱DSN的控制,它的连接信息仍然存储在DSN中。</font></P>
<P
class=boe_text><font color="#FFFFFF">为了在视图间共享连接,我们必须设定设图的共享连接的属性,凡是参与共享连接的远程视图都必须具备共享连接的属性,否则共享连接还是不能实现。设定共享连接的方法有两种:</font></P>
<TABLE width="74%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC"> <LI>
<P class=boe_list><font color="#000000">建立视图设计使用关键字 SHARE。如:<BR>
CREATE SQL VIEW VOrders ;<BR>
REMOTE CONNECTION Northwind SHARE;<BR>
AS SELECT * FROM Orders </font></P>
<LI>
<P
class=boe_list><font color="#000000">设定已视图的ShareConnection的属性为.t.。如:<BR>
DBSETPROP('VCustomers', 'View', 'ShareConnection', .T.) </font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P class=boe_text><font color="#FFFFFF">为了证明连接共享的特性我们执行以下代码:</font></P>
<P class=boe_code><font color="#FFFFFF">USE VCustomers IN 0<BR>
USE VOrders IN 0<BR>
?CURSORGETPROP("ConnectHandle", "VCustomers")<BR>
*显示:1<BR>
?CURSORGETPROP("ConnectHandle", "VOrders")<BR>
*显示:1</font></P>
<P class=boe_text><font color="#FFFFFF">我们已经学习了怎样建立“基于 DSN 的连接对象”,并了解了连接共享。仔细思考,您也许会发现“基于
DSN 的连接对象”存在下列问题:</font></P>
<TABLE width="73%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<LI>
<P class=boe_list><font color="#000000">运行时(RUN TIME)的可控性差。比如我们希望应用程序在不同的条件下使用不同的用户登录数据库服务器、或是不同的数据库,是不是要建立
N 个 DSN 以及 N 个“基于 DSN 的连接”?太可怕了! </font></P>
<LI>
<P class=boe_list><font color="#000000">由于“基于 DSN 的连接”对 DSN 的依赖性很强,例如:用户删除或是更改了
DSN 信息,那么我们应用程序就无法正常运行了! </font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
<P class=boe_text><font color="#FFFFFF">为了解决以上问题,Visual FoxPro 提出了“连接字符串的概念”。笔者称之为:基于字符串的连接。一个连接字符串基本上包括五个主要内容:ODBC
驱动器、服务器、用户名、登录名、数据库。(针对 SQL Server 而言)</font></P>
<P class=boe_code><font color="#FFFFFF">CREATE CONNECTION Northwind2 ;<BR>
CONNSTRING "DRIVER=SQL;UID=sa;DATABASE=Northwind;SERVER=(local);PWD="</font></P>
<P class=boe_head3><font color="#FFFFFF">通过工具建立连接</font></P>
<P class=boe_text><font color="#FFFFFF">以上我们都是通过命令的方式建立连接,现在我们将使用Visual FoxPro提供的连接设计器建立连接。上文我们讲到:连接对象分为两类:“基于
DSN 的连接对象”和“基于字符串的连接对象”。图5:</font></P>
<TABLE width="74%" border=0>
<TBODY>
<TR>
<TD width="100%" bgcolor="#CCCCCC">
<OL>
<LI>
<P class=boe_list><font color="#000000">在连接设计器中选择“数据源、用户标识、密码”就说明在建立“基于
DSN 的连接对象”,在“数据源”列表框中可选择当前可用的用户型、系统型 DSN。 </font></P>
<LI>
<P
class=boe_list><font color="#000000">在连接设计器中选择“连接串”就说明在建立“基于字符串的连接对象”,为了快速、正确的设计连接字符串,我们可以打开文件型
DSN 参考,注意:“基于字符串的连接对象”不依赖文件型 DSN。
</font></P>
</LI>
</OL>
</DIV></TD>
</TR>
</TBODY>
</TABLE>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -