网站首页  |   业界社区  |  电信社区  |  技术社区   |  极客社区  |  游戏社区  |  生活社区   |   科技博客  |   同事录
TechWeb-技术社区


标题: [转贴] VB访问SQL Server数据库技术全揭密
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:27 资料 短消息 加为好友 QQ
VB访问SQL Server数据库技术全揭密

 本文讨论了Visual Basic应用程序访问SQL Server数据库的几种常用的方法,分别说明了每种方法的内部机理并给出了每种方法的一个简单的实例,最后比较了每种方法性能和优缺点。1Y i0n.]&A2W

.P5S9i0P0r1Jtech.techweb.com.cn  一、引言
1t!i8G2w:U0\-q$s4pTechWeb-技术社区
0H0m#i&C7m#l"l  SQL Server是微软推出的中小型网络数据库系统,是目前最常用的数据库系统之一。随着SQL Server网络数据库应用程序日益增多,这种Web数据库应用系统的正常运行一般依赖于已存在的用户数据库。创建维护数据库的工作可用SQL Server提供的SQL Enterprise Manager工具来进行,如能提供一种定制的数据库管理工具,通过管理应用程序来管理数据库及其设备,对用户来说无疑是最理想的。/{']:V,y(?.D1O)R4n
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛3T*L:P;W:~"@5q3v
  Visual Basic作为一种面向对象的可视化编程工具,具有简单易学,灵活方便和易于扩充的特点。而且Microsoft为其提供了与SQL Server通信的API函数集及工具集,因此它越来越多地用作大型公司数据和客户机—服务器应用程序的前端,与后端的Microsoft SQL Server相结合,VB能够提供一个高性能的客户机—服务器方案。
;y/K#F6Z4V;t)S5C0B#h(h%K#d&@0N$c
  二、VB访问SQL Server数据的常用方法tech.techweb.com.cn#f0Q2f5s S T/O*f9i1B;N
$t+Z4N%f,p3D.m7m
  使用Visual Basic作为前端开发语言,与SQL Server接口有几种常用的方法,即:-w4m9_:T#@#D&F

2E9r1h1B0D  ①数据访问对象/Jet
9K4?:B/c7F0S%J4E程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  ②为ODBC API编程
!q8W#q9{/C;Z  ③使用SQL Server的Visual Basic库(VBSQL)为DB库的API编程程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛0e&O:`3L7c0l)T!S
  ④RDO 远程数据对象(RemoteData Objects)8O4v/j9j4K6|
  ⑤ADO 数据对象(Active Data Objects)





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:27 资料 短消息 加为好友 QQ
 1、数据访问对象/Jet
-O-m$G5n0p/B'e*cTechWeb-技术社区
#R'K5~'I"x,oTechWeb-技术社区  VB支持Data Access Objects(DAOs)的子集。DAO的方法虽然不是性能最好的管理客户机—服务器之间的对话方式,但它的确有许多优点。DAO/Jet是为了实现从VB访问Access数据库而开发的程序接口对象。使用DAOs访问SQL Server的过程如下:应用程序准备好语句并送至Jet,Jet引擎(MASJT200.DLL)优化查询,载入驱动程序管理器并与之通讯,驱动程序管理器(ODBC.DLL)通过调用驱动器(SQLSRVR.DLL)的函数,实现连接到数据源,翻译并向SQL Server提交SQL语句且返回结果。下面是一个用DAOs访问SQL Server的VB实例。'G-z%P%F;_'F0c3t

0r6r0J(Y*O  注释:Form Declarations
/J$`7a6b&f  Dim mydb As Database,b2^3?6g9?/T)]%g/B#C
  Dim mydynaset As Dynaset オ
-f6b I K-R:Y/I#E2}TechWeb-技术社区  Private Sub Form_Load()
7J)a&U#Q"_$N*v:K  Set mydb = OpenDatabase("", False, False, "ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales")
,L6`(_({/O4?tech.techweb.com.cn  Set mydynaset = mydb CreateDynaset("Select*from Customers") オ
!S8L*r$U i5N(f2Ytech.techweb.com.cn  End Sub3~+f/P;_3e

)y#x;i!W/V5r/|程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  上述例子是以非独占、非只读方式打开sales数据库,并检索Customers表中的所有字段。OpenDatabase函数的最后一个参数是ODBC连接字符串参数,它指明了Microsoft Access连接到SQL Server所需要知道的一些内容。其中“DSN”为数据源名,“WSID”为工作站名,“DATABASE”为所要访问的数据库名。程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛.a5k2c0`%e

#O+Q+O$F(j,o._-Z:g1[  2、利用ODBC API编程程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛$F$w3r8a ]6F(e4x1A:P

;C!v*b5_4a%H8s  ODBC(Open Database Connectivity)的思想是访问异种数据库的一种可移植的方式。与数据资源对话的公用函数组装在一个称为驱动程序管理器(ODBC.DLL)的动态连接中。应用程序调用驱动程序管理器中的函数,而驱动程序管理器反过来通过驱动器(SQLSRVR.DLL)把它们送到服务器中。tech.techweb.com.cn w"E:d'\3C:m#[!g6o

(K5D9@6K$N.|0x;d%F  下面的代码使用上面一些函数先登录到一个服务器数据库,并为随后的工作设置了语句句柄。tech.techweb.com.cn s/j"_:{ G;p+{

+a%~1M/C8| Y*G6E4B%s)]程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  Global giHEnv As LongTechWeb-技术社区,h6J)p*l*Q0w)C
  Global giHDB As Long程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛(F1T8k9I+[-B4D
  Global giHStmt As Long
!W)m,w3q1_.H  Dim myResult As integer
$g$x#l {:q2C:[(Etech.techweb.com.cn  Dim myConnection As Srting
,]0S0C.N:h#r6A2C z  Dim myBuff As String*256
&p5w8F#~-t%`TechWeb-技术社区  Dim myBufflen As Integer
.I"x.G4n:i  If SQLAllocEnv(giHEnv)<>SQL_SUCCESS Then(i8@9m/w6y,G q9M/q
  MsgBox"Allocation couldn注释:t happen!"
!p,D-i.W)S!q3y/a*Etech.techweb.com.cn  End If)h,t \4n8V
  If SQLAllocConnect(giHEnv,giHDB)<>SQL_SUCCESS Then
8j+L.`!Y*B-E-Q4p  MsgBox "SQL Server couldn注释:t connect!"8e5Y3C3A:e(v&F
  End If
-J%V%@:P!T$S({3d,Z1o"hTechWeb-技术社区  myConnection="DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales"
6L Y%['f,}/{  myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),
3d,^"d0s(Z'T$x5R6R)C  myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D)*n7d1p%Z1N$Q
  myResult=SQLAllocStmt(giHDS,giHStmt)
!{1w6R0y!G  myResult=SQLFreeStmt(giHStmt,SQL_COLSE)tech.techweb.com.cn!F#A"t5J%W7H"}"a6z$i
  rsSQL="Select * from Customers Where City = "Hunan""
8n'N2m4u"^!s8~;H([  myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:28 资料 短消息 加为好友 QQ
 3、使用VBSQL对DB库API编程0F4~2~3p,F7g
L1x,i-H9{5r(J.I#|
  DB库是SQL Server的本地API,SQL Server的Visual Basic库(VBSQL)为Visual Basic程序员提供API。从一定意义上说,VBSQL是连接Visual Basic程序到SQL Server的性能最好最直接的方式。VBSQL包含以下三个文件:
-^/w.q&O)Ztech.techweb.com.cn,_-v!t%R3v6Y6r-F
  VBSQL.VBX: 包含库函数,具有访问重要的消息和处理错误的能力tech.techweb.com.cn4K/R4p;Z6k5s
  VBSQL.BI:包括所有的常量和变量说明
!n5[!d7@*j'~  VBSQL.HLP:Windows帮助文件,使用VBSQL的指南'c L+Q+U"q1i5q
;X8X.C4r0](B,[;{
  使用VBSQL时,必须将VBSQL.BI加入到Visual Basic工程文件中,并确保VB程序运行时有VBSQL.VBX文件。tech.techweb.com.cn0\0M,U1z.E
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛/z+@9f%k&v+i6q*|"o!l
  一般的DB库API编程的过程是这样的:先通过调用SqlInit对DB库进行初始化,再调用SqlConnection打开一个连接,然后就可做一些工作。下面的代码是一个初始化DB库并登录到服务器的通用例程。程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛7J9C0f9m4|2l:p6z4M:Z

7^(V6`8c,i0Y7i  Private Sub InitializeApplication()
h V4U2j*f7{;@-Y;?  DBLIB_VERSION=SqlInit()TechWeb-技术社区1S8C%~,Y.V#o
  If DBLIB_VERSION=""Then
t3H!c3e2S6z.j-O&t程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  MsgBox"Could not initialize DBLIB!Exit application.", MB_ICONEXCLAMATIONtech.techweb.com.cn.l$O3b+o*z&{0y9L.C
  End If
"r*f'k*l1^/G \-@:W  End Subtech.techweb.com.cn.U3g#l8y5G$_&|
  Private Function LoginToServer() As integer
-B4S6u(t2G9^/k/}$dTechWeb-技术社区  loginToServer=SUCCEED程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛0V'[0l,c1|"f
  Status%=SqlSetloginTime%(loginTimeOut)TechWeb-技术社区 ]!Y,[%L0u+w3d
  If giSqlConn<>0 ThenTechWeb-技术社区+m9M E&t.O-`$U&`
  SqlClose(giSqlConn) 注释:关闭已打开的连接){4B6L%e5y(Z8a$|*O*U
  giSqlConn=SqlOpenConnection(gsServerName, gsLoginID, gsPassword, ProgramName, ProgramName)
,i0N&U2D(l5v6L程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  If giSqlConn<>0 Then!k4t'?:[-N9l
  liresuit=SqlUse(giSqlConn,"Sales")
(_,a%I2D!P2o)u/}TechWeb-技术社区  Else
9Y%x+e:d(J0J  LogintoServer=FAIL
(O+O#t(i.~3I$I程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  End If
(I5S L$z6e%d2F!rTechWeb-技术社区  End Function





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:28 资料 短消息 加为好友 QQ
 4、RDO 远程数据对象(RemoteData Objects)1S7c6l/a0p!Q$_5w
tech.techweb.com.cn0C0^8l4J6H5Y4l
  要讨论RDO,就必然要谈到DAO。RDO是从DAO派生出来的,但两者很大的不同在于其数据库模式。DAO是针对[记录(Records)]和[字段( Fields)],而RDO是作为[行(Rows)]和[列(Columns)]来处理。也就是说DAO 是ISAM模式,RDO是关系模式。此外DAO是访问Access的Jet引擎(Jet是ISAM)的接口,而RDO则是访问ODBC的接口。 S&U'g"K!q%a-e8f.o3V%b)?
&?$Y'Z;h8^4d5V
  可见,RDO是综合了DAO/Jet、VBSQL/DBLib以及ODBC的优点的对象(Object)。需要强调的是,RDO是包裹着ODBC API的一层薄薄的外壳, 被设计成在后台(服务器端)有数据库存在的前提下运行,同时也是针对SQL Server和Oracle而特别设计的。7e%l&]%j7Q+T
tech.techweb.com.cn:L&L8_'p0f$R$S
  RDO的优势在于它完全被集成在VB之中。此外,直接访问SQL Server存储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、Visual Database Tools的集成化等,也是RDO的长处。5T#b,~0j7q6R0f3]#w#G

5Q3o-M;M#y'k-OTechWeb-技术社区  在RDO的对象和集合中,有很多对数据库的状态和设定进行操作的属性(Property),以及对数据库进行操作的方法(Method)。利用这些,从RDO2.0起就可以开发事件驱动的数据库应用程序。
"n#F5}2X-f,I9J!I5|tech.techweb.com.cn9],G(W1C$g$u1L
  RDO对象与VB中其他对象的概念相同。与VB用的ActiveX控件(以往称为Custom Control或OCX、VBX)相似的是,RDO也带有属性和方法;但同Spread、InputMan等普遍应用的ActiveX控件不同的是,RDO没有自己的用户界面,因而可以和VB标准的Timer控件归为同一类。当然也可以将RDO看作调用ODBC API函数,进而对后台数据库操作加以控制的对象。在RDO的属性和方法中,包含了对单个的ODBC API函数以及一连串API函数的调用。"k4W*|4F4`2q3_
程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛%K0o3j-|*M,k'O1D)g
  ①rdoEngine对象+u,j+x:`0z5e8P6b

(q:`:a+S1K)`9x%l0O)xTechWeb-技术社区  最初调用RDO对象以及RDC(远程数据控件)时,自动生成rdoEngine对象的附带事件(incident)。rdoEngine用于对RDO全局属性的参数、选项进行设置,是在RDO的阶层结构内处于最上层的对象,包含了所有的其他对象。
+l0X,`#s v$v$H2O程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛
3g.K([9k"{+u(X(Y;|TechWeb-技术社区  rdoEngine对象与DAO/Jet不同,虽然被多个应用程序共享,但体现rdoEngine对象的设定值的属性却并不共用,而是在各自的应用程序的程序界面中对其分别加以设定。这些设定值对其他使用RDO以及RDC的应用程序没有任何影响。rdoEngine不是集合的要素,而是重新定义的对象,rdoEngine对象不能被追加作成对象属性的初值。
&V8\!c0a0n-c程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛 \,]1g;t,l,S*m7Y%]
  ②rdoEnvironment对象
!d"\!E+U/B,]"H0U4l
2K.u'B$p3e2P/i+d(I  RDO对象在自动创建rdoEngine对象时,将rdoEnviroment对象的初始值生成并保存为rdoEnviroments(0)。一般情况下,应用程序中不必追加rdoEnvironment对象,大多只需对已有的rdoEnviroments(0)进行操作就可以了。只有在支持一个以上事务(Transaction),需要将用户名和口令信息分别处理的情况下,利用rdoCreateEnvironment方法将特定的用户名和口令值做成新的rdoEnvironment对象。在这个方法中可以指定固有名、用户名和口令,如果所指定的值与rdoEnvironments集合的已经存在的成员名称相同,会产生错误。新建的rdoEnvironment对象自动追加在rdoEnvironments集合的最后。调rdoCreateEnvironment方法时,其name参数可以是长度为0的文字列,这时新的rdoEnvironment对象将不会被追加在rdoEnvironments集合之中。





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:29 资料 短消息 加为好友 QQ
③rdoConnection对象
!S5J2o:w:v+L-V(@;r
'W1d(s+Z7|(E  rdoConnection对象用于同SQL Server的连接管理。
*|0y6U%j;_5o)f3s/x;r#m
1G4Z7C5r#e v!O)R程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  下面是与SQL Server连接的例子。
B2i3F1F4m6}+{1ITechWeb-技术社区7m:h!|"@/l6J3Y
  用OpenConnection方法的一个实例。
6q,A-A0o1e#W%L8_)C-d8vtech.techweb.com.cn
-q'V0?'d1e3y1OTechWeb-技术社区  设定的DSN为MyDSN:tech.techweb.com.cn&m)y/?)r3p6@

'^2q&?-L0K;Y*u3b/{  Dim Cn As rdoConnection6d#c5m6Q*c(O0|"X
  Dim En As rdoEnvironmenttech.techweb.com.cn1Z/N*A.~$b#X1f
  Dim Conn As StringTechWeb-技术社区,c9`*c2g%T3A/y!{
  Conn = "DSN = MyDSN; UID = Jacob;" & "PWD = 123456; DATA BASE = MyDb;"
*F#y!p$p:[:G*c*p$s  Set Cn= En.OpenConnection("", rdDriverPrompt, False, Co nn)tech.techweb.com.cn-K7n7^*Q7X4Y#J2I
  Set Cn= En.OpenConnection(Prompt:= rdDriverPrompt, Rea dOnly:= False,Connect:= Cnn)
%Z#I0~4Q5q3etech.techweb.com.cn6n+L!I'D,F7l;X)b5[%L
  用EstablishConnection方法的一个实例。!G/O#H)Z*u8G
tech.techweb.com.cn%n3E'L+{4b"I&]
  这里以独立的rdoConnection对象为例说明与SQL Server的连接。tech.techweb.com.cn;|.~3e(n'J+L+A6c

{7x-q-A.Z*f"g#q  Public WithEvents Eng As rdoEngine
3d7K3j/{%W)n0V  Public WithEvents Cn As rdoConnection
+}&V$_;B'J0R.P.T2K  Private Sub Form_Load()0R-n5G)k6R8q"`
  Set Eng = New rdoEngine)x!P7w8E,?.Y
  Set Cn = New rdoConnection
(S1h*P0P8`:C%n:V  With Cn
&A(S!y$N7X8_$l程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  .Connect = "UID = ; PWD = ;" & "DATABASE = pubs; DSN = biblio"
$q,k!K,`.V6m5V2M'j#R;dTechWeb-技术社区  .LoginTimeout = 5TechWeb-技术社区+b$q7R1@/h'S%a%S"g2P
  .EstablishConnection rdoDriverNoPromt, True, rdAsyncEna ble
3q8s&{4F,^  End With:j.Q"g-@-u5v7\5E%E#u#c
  End Sub
*n1g6~0T5w&U6O/|0U V2o程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛7U$^,b"O7E%V
  在这个例子中,Form_Load函数对rdoEngine和rdoConnection对象进行初始化。这里有一点需要注意,rdoConnection对象是处于独立的状态之下,即使是处于未连接状态也可以设置属性的值。接下来是rdoConnect对象的事件处理程序。从RDO 2.0起可以实现异步方式(rdAsyn cEnable),EstablishConnection就设定为该值。在异步状态下,不必等待与数据库的连接,程序可以迅速从Form_Load 函数中退出。 然后是BeforeConnect事件,该处理在与数据库的连接开始以前被激发,此时不能进行有关终止连接的操作:tech.techweb.com.cn2f*R q$y/_)P(X,j/P+N
TechWeb-技术社区+u0G7O#_.{)_9V
  Private Sub Cn_BeforeConnect(ConnetString As String, Pro mpt As Variant)
3n9P!e!y3E%C4S$j9K5g  MsgBox "正在连接" & ConnectString, vbOKOnly, "连接前"tech.techweb.com.cn-L&j'@8B.w!a8F%h;E
  End Sub





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:30 资料 短消息 加为好友 QQ
 (2)取SQL Server安装目录下的DATA子目录路径
$v9N4["b"v)^TechWeb-技术社区
0m4Q5h ^6U:z/f!ITechWeb-技术社区  取SQL Server的设备文件缺省目录,返回如D:MSSQL DATA。
3u3j3b f4V2W9l5?
(j+C/\8I8c;w6h7Utech.techweb.com.cn  Public Function SQLGetDataPath(Cn As ADODB.Connection) As String$m%U&N%W(z5`
  Dim sSQL As String
'S4n q.y P'U*l)z5Ptech.techweb.com.cn  Dim RS As New ADODB.Recordset程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛0U*d"F"I)~)P,k'h,h
  Dim sFullPath As Stringtech.techweb.com.cn(P/L.G/c2o.^(h2@:l*^:n
  On Error GoTo errSQLGetDataPath
&c:P%u,Q.L+}+x  sSQL="select phyname from master..sysdevices where name=注释:master注释: "&[.H I9i1Q,M(i'N'N0s/T
  RS.Open sSQL, Cn
.|4A(q(a/wtech.techweb.com.cn  sFullPath = RS! phyname8S+Y C"@2d4B)|/}+[
  RS.Close
:o.S8n5T&p;[1k'Y  SQLGetDataPath=Left $ (sFullPath, Len(sFullPath) -10) 注释:MASTER.DAT的大小
4}#?-Q/k&r,V"]'_9Qtech.techweb.com.cn  Exit Function4i3Z1X0X {
  errSQLGetDataPath:
(u*g)E+}#v8S  SQLGetDataPath=" "程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛'y+g F5s0w"`
  End Function
5p.A1_5X4O,_#J2^
;L9c3V+I6G&m2W  (3)创建一个新数据库程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛(J&b(x(r#P7P

%C/i2Q-d-{&N,h)?,y  Public Function SQLCreateDatabase65 (Cn As ADODB.Connection,sDBName As String, sDataDeviceName As String, nDataSize As Integer, Optional sLogDeviceName, Optional nLogSize) As Boolean5h7? ~6j2Z
  Dim sSQL As String g!B,x's.p"V4w6r'w
  On Error GoTo errSQLCreateDatabase65
.[/h:J6d&I#q6Y1R程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  Dim sDB As String
5e(Z:^!K.z.].w&N5]2l  sDB =SQLGetCurrentDatabaseName(Cn)
&t3w9|!Q2Y5z'O$_%Q(?1E3p  sSQL = "USE master"
8U&I9Z(^1x(M(^*M4|.oTechWeb-技术社区  Cn.Execute sSQL
6e6T#y$G6e  sSQL ="CREATE DATABASE" & sDBNameTechWeb-技术社区3T4I,w0O ]7a
  sSQL = sSQL &" ON " & sDataDeviceName & "=" & nDataSize程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛*B.H,|5_3P4e)]
  If Not IsMissing(sLogDeviceName) And Not IsMissing(nLogSize) Then(?7G5D \;N
  sSQL = sSQL & "LOG ON" & sLogDeviceName & "="& nLogSizeTechWeb-技术社区1@)M1F5s-}.|5H(Q7W3O'A
  End If
'z'c9~#S+N'_&e  Cn.Execute sSQLTechWeb-技术社区5D%O9H%l2w4G$O5@'c
  sSQL = "USE" & sDB
/n2m2w"|+l5I7D#x7uTechWeb-技术社区  Cn.Execute sSQLTechWeb-技术社区/G4N$Q1k(o0J/c!V:J0e
  SQLCreateDatabase65 = True
5b#s%J&j+S#x6u#E8d+Rtech.techweb.com.cn  Exit Function.d+~+c/h n#^"m B6F+^
  errSQLCreateDatabase65:
,B(S'J0k#}7p*A;ZTechWeb-技术社区  On Error Resume Next
7y4b"b-t$c8S  sSQL = "USE " & sDB
#G%{#Y I.S2f.R  Cn.Execute sSQL$v7b"H.\;^3r$[#I
  SQLCreateDatabase65 = FalseTechWeb-技术社区 l1}%W2]:n&p `
  End Function4b4\:]2E,W3o

(~1o/i(c$c.L(D"PTechWeb-技术社区  (4)判断一个数据库是否存在
'M-b7H"@6]#M4s4?6Ztech.techweb.com.cn
6c-`:e)T%X3o4i'x%}  Public Function SQLExistDatabase(Cn As ADODB.Connection, sDBName As String) As Boolean
,l-C5|6K5B.j9t程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  Dim sSQL As String'c#j6@$U4l1u
  Dim RS As New ADODB.Recordset'W5L c)l"k.H5c
  Dim bTmp As Boolean
2| ^5L;p(C%`9rTechWeb-技术社区  on Error GoTo errSQLExistDatabasetech.techweb.com.cn z5L$?;@(q'H8h'o1f
  sSQL = "select CntDB = count ( * ) "8l#m/}-n0u#y
  sSQL = sSQL & "From master.dbo.sysdatabases"
'r,T#E%K.h8{.a2?,|6ZTechWeb-技术社区  sSQL = sSQL & "Where name = 注释: "& sDBName & " 注释: "
!F7L3k(F3h6c3K8V!p$x程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  RS.Open sSQL, Cn
'Y+I'G!r6T"_  If RS! CntDB = 0 Then bTmp = False Else bTmp = True
1V;X!b6q4z(w1y!?4k!hTechWeb-技术社区  RS.Close
&v$j7m"T+V9Atech.techweb.com.cn  SQLExistDatabase = bTmp
5H-x1s4l N  Exit Function
'F*S0D/g,k5B/a4t/`TechWeb-技术社区  errSQLExistDatabase:)g/J0f8v4U3a$T,q$w(O
  SQLExistDatabase = False:s4C"c*N;W4y2I-Q
  Exit Function
#j2|!p%B*c)R6^/Y(A程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  End Function





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:31 资料 短消息 加为好友 QQ
 (5)删除一个数据库0h+V9k#y"E9l$K
tech.techweb.com.cn%@"x"R0b"W'|(M.B:T(T7b
  Public Function SQLDropDatabase (Cn As ADODB.Connection, sDBName As String) As Boolean,P$y#[)|,F;n){"w8`
  Dim sSQL As String程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛9E5I'w!R2j/I.a
  On Error GoTo errSQLDropDatabaseTechWeb-技术社区&m1I;C7u4R0{"\/j N2v
  If Not SQLExistDatabase(Cn, sDBName) Then8B*Y(n1p5v%c1o#B
  SQLDropDatabase = TrueTechWeb-技术社区6w/y4w*E*I9e"w0J$b
  Exit Function
7u0]8S)t:gTechWeb-技术社区  End If$s#f(f*M.F
  Dim sDB As String
%W9{6x3G#l-F  sDB = SQLGetCurrentDatabaseName(Cn)(g;d.O6{;L9A
  sSQL = "Use master"
1@1P8s9^!E%B*` M,}TechWeb-技术社区  Cn.Execute sSQL
;M5M2k&H:i!A1[:`"O+o:Q3L  sSQL = "DROP DATABASE " & sDBName
9e/p;n3F;O$Gtech.techweb.com.cn  Cn.Execute sSQL
.C3d&C5Q9w%Z9n)LTechWeb-技术社区  sSQL = "USE " & sDB1K%A+[.w2o2A(J3H8|8h4~
  Cn.Execute sSQLTechWeb-技术社区1R/H.Q;R:K ]
  SQLDropDatabase = True;w+m(m7K.x){#a!g0[7h.U
  Exit FunctionTechWeb-技术社区/v1z7I6s3F&C
  errSQLDropDatabase:
.]+V)T&^ m)h ['f程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛  On Error Resume Next
"Q1c(G:W#L  sSQL = "USE " & sDB%X4?3O,K9d
  Cn.Execute sSQL9y'N&@!m8_.T4q
  SQLDropDatabase = False
3B2m"U0M;N+[8~$@  End Function程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛)l"a:x9L*|"g)_
4C#I"J;O*w0K0u)d+H
  三、性能比较及应用说明+p8G3z0t;K*_
:Q-D*t#A6g:\
  用VB开发基于SQL Server的数据库系统,以上几种访问SQL Server的方法各有各的特点。DAOs方法是基于对象的,因而便于使用,但是它是从Visual Basic到SQL Server最慢的连接方式。ODBC API和VBSQL方法从本质上讲是基于程序的。ODBC API方法通用性好,允许最强的互操作性,编程简单,但速度慢于VBSQL方法。VBSQL方法通过VBSQL控件,提供了重要的SQL Server前端应用程序所需的灵活性、强大功能和良好性能。它具有真正的事件驱动及错误处理能力,完全支持异步处理、游标和计算列等。这些都是VBSQL方法超出其它方法的优势,但其编程稍复杂。RDO是位于ODBC API之上的一个对象模型层,它依赖ODBC API、ODBC驱动程序以及后端数据库引擎来实现,用RDO所需的程序短小(约250 KB)、快速。RDO具备基本的ODBC处理方法,可直接执行大多数ODBC API函数,RDO包含在VB 4.0/VB 5.0企业版中,由MSRDO32.DLL动态连接库来实现。RDO是综合了DAO/Jet、VBSQL/DBLib和ODBC的优点的对象模型,包含ODBC API应用层,设计为在后台(服务器端)有数据库存在的前提下运行,是针对SQL Server和Oracle而特别设计的。RDO的优势在于它完全被集成在VB之中,可直接访问SQL Server存储过程、完全支持T-SQL、T-SQL调试集成在开发环境中、Visual Database Tools的集成化等。但微软已宣布今后不再对VBSQL/DBLib进行升级,而ODBC API函数一般的编程方式也不为人们所喜爱,RDO的应用将逐渐减少。至于实际使用哪一种接口方式,在很大程度上依赖于用户的应用程序的具体情况而定。





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:31 资料 短消息 加为好友 QQ
 四、VisualBasic访问数据库的前景
8t6a*^,E7_tech.techweb.com.cn程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛-I4J1M:u/@3}
  近来随着Web应用软件的迅速发展和现有数据存储形式的多种多样,Visual Basic访问数据库的解决方案面临诸如快速提取分布于企业内部和外部有用商业信息等的多种挑战。为此Microsoft提出一种新的数据库访问策略,即“统一数据访问”(UniversalDataAccess)的策略。“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独立于开发工具和开发语言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工具、应用软件、操作平台、建立容易维护的解决方案成为可能。
%G+e/h0?'q-PTechWeb-技术社区
5[9B5\(\.p-]$utech.techweb.com.cn  “统一数据访问”的基础是Microsoft的数据访问组件。这些组件包括ActiveXDataObjects(ADO)、RemoteDataService(RDS,也称“高级数据连接器或”ADC)、OLEDB和ODBC。





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:34 资料 短消息 加为好友 QQ
③rdoConnection对象
8k8L(_;b(l0e/s"j
&W6O/M)i6a7c,ITechWeb-技术社区  rdoConnection对象用于同SQL Server的连接管%





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
阿妙
TW版主
Rank: 7Rank: 7Rank: 7


UID 86099
精华 26
积分 12133
帖子 7408
阅读权限 100
注册 2006-11-2
状态 离线
发表于 2008-7-31 00:35 资料 短消息 加为好友 QQ
 (5)删除一个数据库程序开发,操作系统,服务器,源码下载,Linux,Unix,BSD,PHP,Apach,asp,下载,源码,黑客,安全,技术社区,技术论坛!u6E:p ~7I;@
TechWeb-技术社区'?-f d5x*L8n'X:P
  Public Function SQLDropDatabase (Cn As ADODB.Connect





人生若只如初见,何事秋风悲画扇? 等闲变却故人心,却道故人心易变。
引用 回复 顶部
查看积分策略说明快速回复主题
选项 标题 Smilies
禁用 URL 识别
禁用 Smilies
禁用 Discuz!代码
使用匿名发帖
使用个人签名
接收新回复邮件通知
内容





当前时区 GMT+8, 现在时间是 2008-12-3 07:38
京ICP证060517号

本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.5.0 © 2001-2008 Comsenz Inc.
Processed in 0.059882 second(s), 8 queries

清除 Cookies - 联系我们 - TechWeb.com.cn - Archiver - WAP