编写数据库应用程序必看

来源:百度文库 编辑:神马文学网 时间:2024/04/30 08:05:10

窗体顶端

 

窗体底端

编写数据库应用程序必看----强烈推荐

 

第一节 ODBC API

第二节 DAO 和 ADO 的技术状态

 

1994年,微软在Access 2.0 中首先引入了16位的DAO (Data Accessing
Object 数据访问对象),以实现和Jet 数据库引擎的连接,这是允许程序
员操纵Jet 引擎的第一个面向对象的接口。
DAO 提供了一个复杂的可编程数据对象的层次模型,由上到下分别是:
DBEngine
Workspace
Database
TableDef
QueryDef
Recorset
DAO 的使用非常复杂,例如,为了引用 Recorset,必须从上到下逐级
引用:

DIM wname As DAO.Workspace
DIM wm1 As DAO.Database
DIM wm2 As DAO. TableDef
DIM wm3 As DAO.QueryDef
DIM wm4 As DAO.Recorset
set wname=DBEngine.Workspace(0)
.....

更重要的,DAO/Jet 并不适合客户/服务器模式的数据库系统,于是,
微软又开发出了RDO(Remote Data Object 远程数据对象), 和RDC 控
件(在MS RemoteData Control 6.0下),解决了客户/服务器模式下,开
发象SQL Server 或 Oracle 这些大型远程数据库的困难。

VB提供的RDO 组件在工程-〉引用:

客户端:MS Remote Data Object 2.0
服务器端:MS Remote Data Servers 2.5 Library

MS Remote Data Servers Server 2.5 Library

显然,这种模式需要编写服务器端程序,在某些情况下可能是不现实的。

继RDO 之后,微软又提出了全新的ADO 技术(ActiveX Data Object
),ADO 是DAO 和RDO 的继承者,它基于微软提出来的OLE DB 数据访问
模式,它可以处理目前几乎全部关系型数据库和非关系型数据库系统。

而且,它是专门为大范围的商业数据库系统设计的,ADO 比DAO 占用
内存少,所以它更适合大流量和大事务量的网络计算机系统。

ADO 的影响很大,现在几乎所有的非微软开发环境都内置了ADO 驱
动程序。ADO 的使用也相当方便,利用ADODC 控件(在MS ADO Data Control 6.0(OLEDB)下),可以在本地计算机上获取本地和远程的数据
源,并且可以立刻测试联接是否成功。

ADODC 控件,是以ADO 为父类的一个子类,所以,它继承了ADO 的几乎绝大多数属性事件和方法,同时,也加入了自己的属性事件和方法。
这些属性事件和方法,又大多数套用于一种原来基于DAO 的控件Data,为熟悉Data控件的程序员做一个合理的过渡,并且,加入了和数据绑定控件连接的内容。

所以,同一种目的,在ADODC 中可以有两种方式解决,这样做的好处是给程序员带来了方便,更重要的,ADODC 和数据绑定控件连接非常方便,但代价是无疑降低了效率。

因此,尽管使用ADODC 控件处理数据库问题相当方便,但是,在更多的大型数据库系统的设计中,人们还是使用直接调用ADO 类的方式,因为这样一来,程序的效率往往更高,更灵活。

鉴于这个情况,在下面的讨论中,我们两种情况都进行讨论,具体
怎么用,要看项目的需要。当然首先是从源头说起,先研究ADO 。

还需要说明的是:ADODC 提供了一整套的自动联接方式,这些方式,
十分方便,但是,如果不明白原理,往往联接以后还是感到自己心中无
数,所以,即使您使用ADODC ,但是仔细的研究ADO 本身的东西,也还
是很有必要的。同时,利用ADODC 提供的信息,也给以编程为主的ADO
提供了方便,这些我们后面都会加以介绍。

最近一两年,ADO 技术又有了长足的发展,这里首先要提到微软的
Visual Studio.Net 平台,在这个平台上的主导语言是Visual Basic,
Visual C++,Visual C# ,对于VB 6.0的编程人员,过渡到VB.NET是理
所当然的事情。

微软公司对VB升级到VB.Net的同时,对数据访问模型进行了翻天覆
地的升级。把原来的ADO 模型升级为全新的ADO.NET数据源,
原来最重要的RecordSet 现在消失了,取而代之的是DataSet 和
DataReader,而且不再像原来RecordSet 那样一次只读取一条记录,而
是读取整个数据库,然后在内存中建立一个映像,从而实现了断开方式
数据库连接和内存管理自动化,这是微软的一个重大的技术突破。

但是,这并不等于说学习ADO 技术就没有意义了,首先,由于技术
的继承性,ADO.NET 继承了ADO 的大部分编程方法,另一方面,VB.NET
也还是保留了原来在VB 6.0中ADO 的COM 组件,这就是说,在VB.Net中,
我们还是可以用在VB 6.0中完全相同的方法来编写数据库程序,这对于
中小规模的数据库管理系统,也是很有意义的。

如果您主要是处理Access数据库,那么使用专为Access数据库编写
的DAO 技术将更直接效率更高。因此,在VB.Net中也仍然保留了DAO 的
COM 组件,但是,更改了驱动程序,解决了在VB 6.0中DAO 不能驱动
Access 2000 的问题,因此也得到了广泛的应用。

下面,我们就来仔细的研究ADO 和DAO 的有关问题。在课程的最后,
我们将通过一两个例子,来说明VB.NET中数据库处理的一些方法和特点。


第三节 ADO 最基本的内容


ADO 的内容比较多,我想还是分两个层,先讨论最基本最重要的内容。

一、ADO 组件的引用

ADO 实际上是个COM 组件,它的顶层有三个对象:

Connection :指定数据源,建立和数据源的连接;
Command :对数据源a执行指定的命令,b接受SQL 语句,c表名,d存储过程的名字,e执行SQL 查询,f更新数据,g插入记录等;
Recordset: 来自表或命令执行结果的记录全集,操纵来自提供者的几乎所有数据。

要应用ADO 组件,必须在工程-〉引用:
Ms Activex data object 2.7 Library

把ADO 这个COM 组件调入当前系统。
用F2 可以看到这个组件的状况。库的名字为ADODB,也就是在当初设计组件的时候,工程名起的是是ADODB,所以,应用这三个类都要构造相应的实例,引用时必须作如下声明,:

Dim Cnn As ADODB.Connection
Dim Cmm As ADODB.Command
Dim Reco As ADODB.Recordset

其中,Cnn,Cmm和Reco 是用户自定义的对象变量,为了表述方便,后面的讨论我们都以这组名字作为表达的基础。

真正使用,就要通过New 来建立一个ADO 的实例。

Set Cnn = New ADODB.Connection
Set Cmm = New ADODB.Command
Set Reco = New ADODB.Recordset

有时,希望定义的同时构造实例,也可以写成(ADODB一般可以不写):

Dim Cnn As New Connection
Dim Cmm As New Command
Dim Reco As New Recordset

值得指出的是,如果您直接使用ADODC控件,那上述方法都已经在ADODC内部完成了,不需要程序员自己来写。但是,如果您不使用ADODC控件,而要使用ADO 这个类来编写数据库系统的时候,就需要使用引用COM 的标准方法。

一、数据库连接的建立

可以有四种连接方式:

第一种(用Open)

Cnn.Provider = "驱动程序"
Cnn.Open "数据库名"[,"用户名","密码"]

Cnn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cnn.Open Add.path & "\奖金数据库.mdb"

这里App.path给出了当前路径(该语句在VB.NET中变为
Application.startuppath),这样就可以实现相对路径调用数
据库了。

第二种(用连接字符串)

Connection对象变量有一个Connectionstring,可以输入字符串,
例如对于sql server数据库,字符串设置可用如下规则:

Provider=SQLOLEDB.1; (提供者)
Integrated Security=SSPI; (安全设置)
Persist Security Info=False; (持续的安全信息)
Initial Catalog=pubs; (初始的目录,或默认的数据库)
Data Source=XXX-PE (数据源--计算机名)

请看如下的例子:

Cnn.DefaultDatabase="pubs"
' 这个属性是指定默认数据库,如果没有指定数据库名,
'就使用这里指定的数据库名,SQL Server通常是pubs
Cnn.Connectionstring="driver={SQL Server};Server=bigs; _
uld=sa;pws=pwd"
'其中:bigs为服务器名;sa为用户名;pwd为密码。
Cnn.Mode=adModeShareExclusive
'以独占方式打开(后面会讨论)
Cnn.open

第三种(使用DSN 数据源名)

Cnn.Connectionstring="DSN=pubs;UID=***;PWD=***"
'由于建立DSN 时就已经提供了诸如上面有关的各种数据,
'所以这里只需要直接调用名字就可以了。
Cnn.open

第四种(直接用Open打开)

Cnn.Open "DSN数据源名","用户名","密码"

实例,第一部分,建立三个数据库的连接:
-----------------------------------------------------------------
建立三个Button,分别用三种方法打开三个库,运行时不出错就代表
已连接。由于后面要用一个显示画面,所以一次只能打开一个数据库,看
看这里是怎么解决这个问题的?
-----------------------------------------------------------------

Dim Cnn As New Connection
Dim Cmm As New Command
Dim Reco As New Recordset

Dim Cnn1 As New Connection
Dim Cnn2 As New Connection

Dim Kzr, Kzc, kzc1, kzc2, Nd, inname, Tname


Private Sub Command2_Click()

'用字符串连接SQL SERVER 数据库

If Kzc = True Then Cnn.Close
Kzc = True
If kzc1 = True Then
Cnn1.Close
kzc1 = False
End If
If kzc2 = True Then
Cnn2.Close
kzc2 = False
End If

Cnn.ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=pubs;Data Source=XXX-PE"

'注意一下计算机名要更改

Cnn.Open

End Sub


Private Sub Command1_Click()

'打开数据库的Provider+Open方法

If kzc1 = True Then Cnn1.Close
kzc1 = True
If Kzc = True Then
Cnn.Close
Kzc = False
End If
If kzc2 = True Then
Cnn2.Close
kzc2 = False
End If

Cnn1.Provider = "Microsoft.Jet.OLEDB.4.0"
inname = App.Path & "\奖金数据库.mdb"
Cnn1.Open inname
Tname = "奖金"

End Sub

Private Sub Command3_Click()

'直接使用OPEN 和DSN数据源打开数据库

If kzc2 = True Then Cnn2.Close
kzc2 = True
If Kzc = True Then
Cnn.Close
Kzc = False
End If
If kzc1 = True Then
Cnn1.Close
kzc1 = False
End If

Cnn2.Open "Mysql"

End Sub


Private Sub Form_Load()
Kzr = False
Kzc = False
kzc1 = False
kzc2 = False
End Sub
-----------------------------------------------------------------

二、应用Recordset打开表

前面已经提到,Recordset对象是用于处理来自表或命令执行结果的记录全集,操纵来自提供者的几乎所有数据,所以,处理数据库问题,Recordset是处在重中之重的位置,由于这是个COM 对象,应用的时候同样需要声明,
并且构造一个实例:

Dim Reco As ADODB.Recordset
Set Reco = New ADODB.Recordset

Reco.Open "数据源", Cnn [,指针形态][,锁定方式]

其中:数据源:表名,或者SQL语句
指针形态:
0 向后指针(默认)
1 索引键集
3 动态记录(常用)
4 静态记录
锁定方式:
1 只读(默认)
2 编辑更新
3 Updata更新
4 批次更新

实例:关于Recordset的打开
-------------------------------------------------------------
在相应的按钮事件中加上Reco.Open
-------------------------------------------------------------
Private Sub Command2_Click()
.............
Tname = "employee"
Reco.Open Tname, Cnn, 3, 3

'双向指针,Updata更新
Kzr = True
End Sub

Private Sub Command1_Click()
...............................
Tname = "奖金"
Reco.Open Tname, Cnn1, 3, 3
Kzr = True
End Sub

Private Sub Command3_Click()

....................
Tname = "基本表"
Reco.Open Tname, Cnn2, 3, 3
Kzr = True
End Sub

-------------------------------------------------------------

三、几个重要的Connection对象方法

1)open方法
语法:
Cnn.Open [Connectionstring][,UserID][,password]

注意:Connection的Open方法是连接了数据库,但并没有打开表。

2)Close方法

Cnn.Close
关闭已经打开的连接,但该对象还保留在内存中

3)清除内存

Set Cnn=Noting

真正的消除掉



四、取得记录集中的数据


Reco.("字段名")

Reco.Fields(index).Value '内容
Reco.Fields(index).Name ‘字段名
Reco.Fields(index).type '字段类型
Reco.Fields(i).ActualSize '字段长度

Reco.Fields.Count '字段总数


记录数
Reco.RecordCount 记录数

N=Reco.AbsolutePosition '当前指针的位置

Reco.AbsolutePosition=N '把指针定位在第N笔记录上


五、指针的移动

Reco.MoveFirst '指针指向第一笔记录

Reco.MoveNext '指针指向下一笔记录

Reco.MovePrevious '指针指向上一笔记录

Reco.MoveLast '指针指向最后一笔记录

------------------------------------------------------------------
做一个frame用于显示,内部放置9个Textbox和Label数组。
开始的时候frame1.visible=false。
VarType()检测数据库输出是否为空(MULL),因为空数据的送
出会显示错误信息,应避免这种情况。
Showfiel()用于显示数据
Myscreen()用于设置初始屏幕
------------------------------------------------------------------

Private Sub Showfiel()

For i = 0 To Nd - 1
If VarType(Reco.Fields(i).Value) > 1 Then
Text1(i).Text = Reco.Fields(i).Value
Else
Text1(i).Text = ""
End If
Next
End Sub

Private Sub Myscreen()

Nd = Reco.Fields.Count
If Nd >= 9 Then
Nd = 9
End If

For i = 0 To 8
Label1(i).Visible = False
Text1(i).Visible = False
Next

For i = 0 To Nd - 1
Label1(i).Caption = Reco.Fields(i).Name
Label1(i).Visible = True
Text1(i).Visible = True
Next
Reco.MoveFirst
Label2.Visible = False
frame1.visible=true
End Sub

' 在三个打开数据库的开关事件中都写上:
' Myscreen
' Showfiel

'第一个

Private Sub Command4_Click()
Reco.MoveFirst
Showfiel
End Sub

'上一个

Private Sub Command5_Click()
Reco.MovePrevious
If Reco.BOF Then
Reco.MoveFirst
End If
Showfiel
End Sub

'下一个

Private Sub Command6_Click()
Reco.MoveNext
If Reco.EOF Then
Reco.MoveLast
End If
Showfiel
End Sub

'末一个

Private Sub Command7_Click()
Reco.MoveLast
Showfiel
End Sub

------------------------------------------------------------------
六、Recordst重要的方法:

AddNew 创建一个新记录

UpData 保存对当前数据的修改

Delete 删除当前记录

Requery 用新的SQL 查询去更新当前数据集。

------------------------------------------------------------------
增加几个功能
------------------------------------------------------------------
'增加

Private Sub Command13_Click()
Reco.AddNew
Showfiel
End Sub

'删除

Private Sub Command14_Click()
Reco.Delete
Reco.MoveNext
If Reco.EOF Then
Reco.MoveLast
End If
Showfiel
End Sub

'更新

Private Sub Command15_Click()

'Reco.Fields(i).Type = 3为自动加一的字段ID,不能更新

For i = 0 To Nd - 1
If (Trim(LTrim(Text1(i).Text)) <> "") And (Reco.Fields(i).Type <> 3) Then
Reco.Fields(i).Value = Text1(i).Text
End If
Next
Reco.Update

End Sub

------------------------------------------------------------------


七、执行SQL 语句

执行SQL 语句是为了构造数据集,可以用两种方法:

1)用Connection的Execute方法

完成查询后以记录集的形式把数据传回,这在数据编修的时候,需要传回修改以后的记录集的时候用得比较多。
语法:

Set Reco=Cnn.Execute("命令文字",影响记录的笔数,选择)

“影响记录的笔数”指的是执行Execute方法以后,数据库被修改的笔数,对SELECT 该数值无效。

“选择”指的是“命令文字”的意义,说明如下:

adCmdText 数据源将传入的“文字定义”视为命令文字,
比如SQL 语句。

adCmdTable 数据源将传入的“文字定义”视为表名称。

adCmdStoredProc 数据源将传入的“文字定义”视为存储过程,
适用于SQL Server。
adCmdUnknown 数据源不知道“文字定义”的类型,将自动
检测,可以是SQL 语句,但是自动监测将会降低
效率,此为默认值。

2)用Recordset的Open方法
语法

Reco.Open "SQL语句",Cnn,指针形态,锁定方式

---------------------------------------------------------------
做一个数据查询的Frame,打开表的时候让frame2.visible=true
放入一个Textbox(Text3)为写入SQL 语言用,一个按钮执行查询,
另一个按钮用于把当前表的名字加入。

---------------------------------------------------------------
Private Sub Command9_Click()

If Kzc Then
Reco.Close
Reco.Open Text2.Text, Cnn, 3
ElseIf kzc1 Then
Reco.Close
Reco.Open Text2.Text, Cnn1, 3
ElseIf kzc2 Then
Reco.Close
Reco.Open Text2.Text, Cnn2, 3
End If

End Sub

Private Sub Command12_Click()
Text2.SelText = Tname + " "
Text2.SetFocus
End Sub

Private Sub Command9_Click()

If Kzc Then
Reco.Close
Reco.Open Text3.Text, Cnn, 3, 3
ElseIf kzc1 Then
Reco.Close
Reco.Open Text3.Text, Cnn1, 3, 3
ElseIf kzc2 Then
Reco.Close
Reco.Open Text3.Text, Cnn2, 3, 3
End If
Showfiel
End Sub


---------------------------------------------------------------

八、Recordset查询和过滤

Reco.Find "条件"

把指针定位在符合条件的记录上

Reco.filter = "条件"

只显示符合条件的记录,注意,筛选掉的数据并没有删除,只是
暂时隐蔽,一旦筛选条件移除,又自动恢复原状,筛选移除的方法:

Reco.filter = ""

由于条件是文本的形式,所以构造条件相当的方便。条件表达式除
了>、>=、<、<=、<>、 AND、 OR、 NOT、 XOR以外,更有一种Like ,
用于处理文字类型,使用统配符(*或%),可以实现部分匹配查询。
注意两点:
第一点是查询表达式需要用引号时,要改成单引号。
第二点是统配符必须在结尾存在:
比如:
客户名称 LIKE '龙*' 或 客户名称 LIKE '*龙*' 是正确的。
而 客户名称 LIKE '龙*' 是错误的。

虽然SQL 和Recordset可能有相似的查询功能,但本质是不同的,
SQL是在服务器端处理,把查询的结果传入,所以更适合构造数据集。
而Recordset查询是在客户端,并不影响数据集的本身,所以速度更快,
也更加精细,所更适合做精细的数据处理。
------------------------------------------------------------

在实验程序中增加功能
------------------------------------------------------------
'Find查询

Private Sub Command8_Click()
Reco.Find Text2.Text
If Reco.EOF() Then
MsgBox "没有这个数据"
Reco.MoveFirst
End If
Showfiel
End Sub

'下一个

Private Sub Command8_Click()
Reco.Find Text2.Text
If Reco.EOF() Then
MsgBox "没有这个数据"
Reco.MoveFirst
End If
Showfiel
End Sub

'过滤

Private Sub Command16_Click()
Reco.Filter = Text2.Text
Showfiel
End Sub
------------------------------------------------------------

九、分页
设置每页为N 笔
Reco.PageSize=N

总页数为N
N=Reco.PageCount

设定记录指针指向的页数
Reco.AbsolutePage=N

取得指针指向的页数
N=Reco.AbsolutePage

例:输出某页中的记录:

Reco.AbsolutePage=2
for i=1 to Reco.pagesize
if Reco.Eof then
Exit for
end if
-----处理---------
Next

十、Recordst属性Bof和Eof

分别指示指针指向头以前和尾以后。
结果为true和false

----------------------------------------------------------------
下面我们设法让构造查询条件变得更方便。
加入两个List和一个Combo1,list1的style属性选1-Checkbox为
多选型list2的list属性加入常用的SQL命令单词,再加入一个“字段
送出按钮”。

Myscreen子程序增加一些List和ComboBox处理的程序,在打开
数据库时,把相应字段名显示出来,便于组织条件的时候使用。

所以要加入一个新的过程MyscreenSQL,是因为查询以后可能字段
数目要发生变化,ComboBox要显示新的字段值,但List却希望显示原
来的字段值,便于重新组织查询。

----------------------------------------------------------------
'给Myscreen增加相应的语句

Private Sub Myscreen()

Nd = Reco.Fields.Count
If Nd >= 9 Then
Nd = 9
End If

For i = 0 To 8
Label1(i).Visible = False
Text1(i).Visible = False
Next

For i = 0 To Nd - 1
Label1(i).Caption = Reco.Fields(i).Name
Label1(i).Visible = True
Text1(i).Visible = True
Next
Reco.MoveFirst
Label2.Visible = False

List1.Clear
Combo1.Clear

For i = 0 To Reco.Fields.Count - 1
List1.AddItem Reco.Fields(i).Name
Combo1.AddItem Reco.Fields(i).Name
Next
Combo1.Text = Combo1.List(0)
Frame2.Visible = True
End Sub


'做一个MyscreenSQL过程,为SQL语言发送用

Private Sub MyscreenSQL()

Nd = Reco.Fields.Count
If Nd >= 9 Then
Nd = 9
End If

For i = 0 To 8
Label1(i).Visible = False
Text1(i).Visible = False
Next

For i = 0 To Nd - 1
Label1(i).Caption = Reco.Fields(i).Name
Label1(i).Visible = True
Text1(i).Visible = True
Next
Reco.MoveFirst

Combo1.Clear

For i = 0 To Reco.Fields.Count - 1
Combo1.AddItem Reco.Fields(i).Name
Next
Combo1.Text = Combo1.List(0)

End Sub

'送出字段名

Private Sub Combo1_Click()
Text2.SelText = Combo1.Text
Text2.SetFocus
End Sub

'送出选中的字段列表

Private Sub Command10_Click()

Dim i, st
'List1.Selected(i) = True为选中
st = ""
For i = 0 To List1.ListCount - 1
If List1.Selected(i) = True Then
If st = "" Then
st = List1.List(i)
Else
st = st + "," + List1.List(i)
End If
End If
Next
Text2.SelText = st + " "
Text2.SetFocus
End Sub

'双击list2送出选中的SQL命令

Private Sub List2_DblClick()
Text2.SelText = List2.Text + " "
Text2.SetFocus
End Sub
---------------------------------------------------------------


好啦,一个完整的数据库处理程序完成了,最后注意,退出程序,
在VB 6.0中是 Unload Me,相应的,在VB.Net 变成了Application.Exit()。
怎么样,很有意思吧?

十一、ADO 的Command对象

Command对象主要用于查询数据库,并返回Recordset对象中的记录。

常用属性:

1)CommandText:

设置返回命令,包括SQL,表格,存储过程。

如果是SQL 语句,CommandText的后面要跟上Execute方法。

例如:

Cmm.CommandText="SQL 语句"
Cmm.Execute

2)CommandType属性:

指示如何计算CommandText的值,主要有如下几种选择:

adCmdText 数据源将传入的“文字定义”视为命令文字,
比如SQL 语句。

adCmdTable 数据源将传入的“文字定义”视为表名称。

adCmdStoredProc 数据源将传入的“文字定义”视为存储过程,
适用于SQL Server。
adCmdUnknown 数据源不知道“文字定义”的类型,将自动
检测,可以是SQL 语句,但是自动监测将会降低
效率,此为默认值。

这个属性在很多地方需要设置。


十二、实例:用户名和密码申请机制


第四节 ADODC 控件

ADODC 是VB提供的一个基于ADO 模型的控件,调用它需要:
工程-〉部件-〉MS ADO Data Control 6.0(OLEDB)。

一、连接数据源:

属性:
Connectionstring

1,使用ODBC数据源:如果有可以选择,如没有可以新建,新
建的方法与在Windows下一样。

选择好数据源以后,应该能看到:
Connectionstring="DSN=***"

2, 使用连接字符串:连接字符串包括了驱动程序, 可以利
用文件名调用,完成后要注意测试一下连接。
从效果上看,和数据源是一样的,但可以避免每台客户机
上重复设置。

CommandType属性,最好根据要求设置。

连接“表”或者初始的SQL 语言:
属性:
RecordSource
对话框中出现“命令类型”,实际上就是设置CommandType属性,
最好根据要求选择:
用SQL 用 1-adCmdText
用表名用 2-adCmdTable
存储过程用 4-adCmdStoredProc
不清楚用 8-adCmdUnknown

输入表名或SQL 语句,就完成了数据源联接的设置。

(提示,在直接使用ADO 的时候,如果对 Connectionstring参数
或其它项目没把握。可以先用ADODC设置,成功后再把相应的字符串拷
贝过去)。

ADODC 内置了Recordset对象,所有Recordset对象的属性和方法,
都可以采用,指令格式为:

ADODC1.Recordset.属性或者方法

也就是说,上面所研究的关于ADO 的Recordset对象的一切属性和
方法,都可以直接在这里使用,因此就不再重复了。

值得提出的是SQL 的使用方法:

Adodc1.RecordSource="SQL"
Adodc1.Refresh '没有此句不反应


二、数据绑定控件

使用ADODC 的最大的好处是,可以方便的使用数据绑定控件,这
里先介绍两种:

1)表(Datagrid)
MS Datagrid Control 6.0
属性
DataSource=Adodc1

2)TextBox
属性
DataSource=Adodc1
Datafilds=字段

实例:SQL自由查询


第五节 数据环境DataEnvironment

一、建立数据连接

在工程管理器中,右键 -〉添加 -〉Data Environment

这就产生了一个数据环境窗口DataEnvironment1。下面出现了一
个Connection图标,用以实现和数据库的连接。
在Connection1上右键 -〉属性 ,用ADO 同样的方法进行数据库
的连接。
完成以后,Connection1的ConnectionSource是连接字符串,也
可以在运行期改变连接。
具体方法是:

DataEnvironment1.Connection1.ConnectionString=连接字符串

二、添加命令(与表的连接):

在Connection1上右键 -〉添加命令

就产生了一个Command1

右键,就出现了一个对话框:

通用-〉数据源 -〉可以选 SQL、表、存储过程

例如这里选“表”,选择表名,确认。

在Command1的属性:CommandType 可以改变设置,而CommandText
可以改变“表”或者SQL 命令的文字。

点Command1的加号,可以看到字段名字。

三、添加数据库的关联

如果需要添加数据库的关联,可以在Command1上右键 -〉添加子
命令。
于是在Command1下出现了一个Command2
在Command2上右键 -〉属性
进行表的连接。

打开“关联”选项卡,选择关联字段,添加。这就实现了两个表
的关联。

四、数据库显示

Command1左键拖入窗体,就实现了数据库的显示(左键为Textbox,
右键为DataGrid)
如果是自定义的显示控件(例如DataGrid):
属性:
DataSource=DataEnvironment1
DataMember=Command1 或 Command2

五、Recordset命令

如果希望使用Recordset命令,注意在DataEnvironment1下有一个
ReCommand1(其中的Command1是根据Command1的名字自动给出的),相
当于ADO的Recordset,可以使用Recordset命令集。

这样,我们就可以方便的应用数据库了。

在熟悉了ADO 以后,DataEnvironment数据环境可以使我们设计数据库系统更加方便快捷。

·