一、 Managed Providers

如果你是初学者,可能你会问,什么是Managed Providers?

Managed Providers提供简单的方法连接和访问数据库,有点类似于数据库连接,当然又比它强的多。Managed Providers提供OleDb和SQL Server两种编程接口。因为SQL Server是微软自己的产品,因此,专门提供了一个针对SQL Server的接口,使用这个接口访问SQL Server的效率应该比使用OleDb强。

NameSpaces

本文所有的例子程序都需要使用以下NameSpaces:

<%@ Import Namespace=System.Data %>
  <%@ Import Namespace=System.Data.Oledb %>

Connection

为了连接数据库,必须使用OleDbConnection:

Dim objConn as New OleDBConnection
  (Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:\sff\site\db\users.mdb)

当然,你也可以将具体的连接方法作为变量使用,在连接数据库以后,必须打开数据库:

objConn.Open()

这样,就可以使用数据库了,一般在最后,我们都要求关闭数据库连接:

objConn.Close()
  objConn=Nothing
  Command

连接数据库以后,就可以发送命令对数据库进行操作了,OleDbCommand允许发送命令对数据库进行操作。根据发送的SQL语句,我们可以对数据库进行几乎所有操作。

Dim objCmd as New OleDbCommand(SELECT * From users, objConn)

以上语句建立Command,根据习惯不同,也可以使用以下方法:

Dim objCmd as New OleDbCommand()
objCmd.Connection = objConn
objCmd.CommandText = SELECT * FROM users

还可以这样:

Dim objCmd as New OleDbCommand(SQL String, connection string)

仔细观察上面的语句,我们发现在定义OleDbCommand时,可以同时使用数据库连接OleDbConnection和数据库连接语句。以上代码并没有执行SQL语句,现在我们来看到底怎样执行:

ExecuteNonQuery

当执行没有返回数据的操作的时候,我们可以使用以上方法,比如插入数据、更新数据等操作,具体这样执行:

objCmd.ExecuteNoQuery
  ExecuteReader

在需要一个Data Reader的时候,我们可以使用以上方法,具体这样执行:

Dim objRd as OleDbDataReader
  objRd = objCmd.ExeuteReader

ExecuteScalar

使用ExecuteScalar方法来取得一个单个地返回数据,比如对数据的统计。

Data Reader

OleDbReader是专门用来读取数据的对象,这个对象除了读数据以外,不能做其他任何数据库操作。尽管比较简单,但是在用来浏览数据的时候效率是非常高的。

Dim objReader as OleDbDataReader
  objReader = objCmd.ExecuteReader
  While objReader.Read
  Response.Write(objReader.GetString(0) & <br>)
  End While

以上语句读取Command的返回结果的第一个字段,这个字段是字符型数据。我们可以使用其他方法取得各种类型的数据:

GetBoolean(x)
  GetByte(x)
  GetBytes(x)
  GetChar(x)
  GetChars(x)
  GetDataTypeName(x) -取得数据类型
  GetDateTime(x)
  GetDecimal(x)
  GetDefaultStream(x)
  GetDouble(x)
  GetFieldType(x)
  GetFloat(x)
  GetGuid(x)
  GetInt16(x)
  GetInt32(x)
  GetInt64(x)
  GetName(x) - 取得字段名
  GetOrdinal(name) -根据字段名取得字段序号
  GetString(x)
  GetTimeSpan(x)
  Get&#118alue(x)
  Get&#118alues(&#118alues())

以上方法都是Command返回数据。

Data Adapter

OleDbDataAdapter取得数据并且数据与DataSet之间建一座桥梁,可以这样使用:

Dim objAdapter as New OleDbDataAdapter(SELECT * FROM users, objConn)

实现方法有点类似于OleDbCommand。OleDbAdapter可以填充DataSet,也可以修改数据然后提交以实现对具体数据的修改:

Dim ds as Dataset = New DataSet()
  objAdapter.Fill(ds, users)

以上语句实现将SQL语句取得的Users表的数据填充到DataSet。

Mappings

Mappings可以实现对DataSet的列取别名:

objAdapter.TableMappings.Add(adbtable, users)
With objAdapter.TableMappings(0).ColumnMappings
.Add(PID, ID)
.Add(LastName, LName)
.Add(StreetAddress, Addy)
End With
objAdapter.Fill(ds)

当使用了以上代码以后,就可以用ds.Tables(users)来代替ds.Tables(adbtable)了。

Command Builder

在下一章我们可以看到Command Builder的具体使用和强大功能。

练习:

如果你能理解以下代码,你就可以看下一章的内容了:

<%@ Import Namespace=System.Data %>
  <%@ Import Namespace=System.Data.Oledb %>
  <script language=VB runat=server>
  Sub Page_Load(sender as object, e as eventargs)

Dim objConn as New OleDBConnection(Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:\sff\site\db\users.mdb)
  objConn.Open()

Dim ds as Dataset = New DataSet()
  Dim objAdapter as New OleDbDataAdapter(SELECT * FROM users, objConn)
  Dim objCmdBld As New OleDbCommandBuilder(objAdapter)

objAdapter.Fill(ds, users)

End Sub
  </script>

二、 Data Set

本章将介绍DataSet对象,DataSet对象包含内容很多,我们基本上都将涉及,包括DataTables、DataRows等。

什么是DataSet

回头看看ASP,我们知道当查询数据的时候,返回的数据是放在RecordSet中的,RecordSet只能保存返回的一个表的数据,而且它很不灵活。

DataSet在RecordSet上增加了很多功能,并且,它可以保存多个返回的数据表结果。

DataSet被分解为很多部分比如DataTables和DataRows,可以使用它们创建一个DataSet而不一定要连接到一个具体的数据库。当然,DataSet本身就是离线数据,所有的数据都可以离线使用而不必一直连接到数据库,只有需要对数据库进行编辑的时候才需要连接到数据库。

实践

Dim ds1 As New DataSet()
  Dim dtable As new DataTable(people)
  With dtable.Columns
  .Add(FName, System.Type.GetType(System.String))
  .Add(LName, System.Type.GetType(System.String))
  .Add(UID, System.Type.GetType(System.Int32))
  End With
  dtable.Columns(UID).AutoIncrement = True
  ds1.Tables.Add(dtable)

dim pkey() as DataColumn = {ds1.Tables(people).Columns(UID)}
  ds1.Tables(people).PrimaryKey = pkey

以上语句稍微有点复杂,我们来看看:

前半部分我们建立了一个DataSet和一个叫People的DataTable,然后,我们为这个DataTable加入了三个列并将UID列设为自动递增。最后,将这个DataTable加入到了DataSet。

第二部分我们现在不需要理解,只要知道定义了主键就可以了。

posted on 2005-03-07 16:16  aaron.net  阅读(641)  评论(0编辑  收藏  举报