VBNET数据库编程讲座6

  • 格式:doc
  • 大小:201.00 KB
  • 文档页数:6

1

VBNET数据库编程讲座6

利用对象建立数据库程序的方法和技巧

在数据库编程中,访问数据库的最基本方法还是二个:一个是使用数据库对象,另一个就是使用数据库控件。学会使用数据库对象来编写数据库程序,将使程序更具有通用性,例如:你可以把利用对象编写的数据库程序几乎无需修改就可以移植到程序中去运行。在中,我们可以使用DAO、ADO、三种比较常用的数据库对象来访问数据库,当然,最好使用对象。因为,是Microsoft最新的数据访问技术,这种技术的优势包括:对断开连接的数据的内部支持、全面的 XML 支持以及该技术与整个 .NET 框架的无缝整合。而使用DAO或ADO对象则是为了那些熟悉DAO或ADO的程序员仍然可以在中使用原来的方法编写数据库程序。所以,本文就来介绍利用对象建立数据库程序的方法和技巧。

一 认识对象

的包括两个核心组件:DataSet 和 .NET 数据提供程序,后者是一组包括 Connection、Command、DataReader 和 DataAdapter 对象在内的组件。DataSet(数据集) 是 的断开式结构的核心组件。DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关 DataTable 对象中数据的关系信息组成。 结构的另一个核心元素是 .NET 数据提供程序,其组件的设计目的相当明确:为了实现数据操作和对数据的快速、只进、只读访问。Connection 对象提供与数据源的连接。Command 对象使您能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。DataReader 从数据源中提供高性能的数据流。最后,DataAdapter 提供连接 DataSet 对象和数据源的桥梁。DataAdapter 使用

Command 对象在数据源中执行 SQL 命令,以便将数据加载到 DataSet 中,并使对 DataSet 中数据的更改与数据源保持一致。可以为任何数据源编写 .NET 数据提供程序。.NET 框架附带了两个 .NET 数据提供程序:OleDbDataAdapter和SqlDataAdapter。OleDbDataAdapter 适用于由 OLE DB 提供程序公开的任何数据源(包括SQL Server);SqlDataAdapter 则特定于 SQL Server。由于该对象不必通过 OLE DB 层,所以它比 OleDbDataAdapter 快。但它只能用于 SQL

Server 7.0 或更高版本。

图一阐释了 结构的组件。 2

图一

在这里我们要特别认识一下数据集DataSet这个对象,有过ADO编程经验的人很容易把它与ADO中的RecordSet等同起来。其实,DataSet不是一个RecordSet,而是存在于内存中的数据库,也就是说它是离线的,或者把它说成是数据库的一个镜像更好理解一点。所以,当你在DataSet中修改记录的时候,它并没有在源数据库中进行相应的修改,必须用命令进行处理才能完成真正的修改。

二 使用DataGrid显示数据库记录

DataGrid控件不仅可以用表格形式数据库记录,更重要的是我们可以在表格内直接编辑、修改和添加记录。程序运行时的界面如图二所示。在这个实例中,我们打开的数据库是Stock.mdb,数据表的名称是Stock (下同) 。要实现图二所示的功能,我们可以按下面的步骤来操作:

①:创建项目和窗体

启动之后,从“文件”菜单上指向“新建”,然后选择“项目”。

在“项目类型”窗格中选择“Visual Basic 项目”,再在“模板”窗格中选择“Windows 应用程序”。给新建的项目取一个名字,然后单击“确定”。 这样就创建一个新项目,并在 Windows 窗体设计器中显示新窗体。 在窗体上添加图二中所用到的各种控件并保存好文件。

②:引用

要使用对象首先应该引入,为此,在程序的最前面加如下列二行代码: 3

图二

Imports System.Data '引入数据库操作类命名空间

Imports System.Data.OleDb '引入操作命名空间

再定义如下几个公用变量:

Dim Stockconnection As OleDbConnection = New OleDbConnection() '建立连接对象

Dim Da As OleDbDataAdapter '建立 OleDbDataAdapter对象

Dim Cbd As OleDbCommandBuilder '建立 OleDbCommandBuilder对象

Dim Dsstock As DataSet = New DataSet() '建立DataSet对象

Dim Jthtable As Data.DataTable '建立表单对象

Dim Conn As String '定义连接字符串

窗体装载事件的代码是:

Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\stock.mdb"

Stockconnection.ConnectionString = conn

Dim Cmd As New OleDbCommand("Select * from stock", Stockconnection)

Da = New OleDbDataAdapter(Cmd)

Cbd = New OleDbCommandBuilder(Da)

Stockconnection.Open()

Cmd.ExecuteNonQuery()

Stockconnection.Close()

Da.Fill(Dsstock, "stock") '填充数据集

DataGrid1.SetDataBinding(Dsstock, "stock") '用程序实现绑定

最后一个语句也可以用下面三个语句来代替可能更好理解一些:

Da.Fill(dsstock)

Jthtable = dsstock.Tables.Item(0)

DataGrid1.DataSource = Jthtable

这里要特别注意数据库的路径问题。在中,每当你创建一个新的项目时,程序会在项目所在的文件夹中自动建立一个Bin的子目录,如果把数据库拷贝到这个子目录中,那么在程序中就可以不写出数据库的路径。此时,Conn的写法如下:

conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Stock.mdb"

或者写成下面的表达式也可以:

conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\stock.mdb"

如果数据库跟项目文件是放在同一个目录下面,则可以使用下面的写法: 4

Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\stock.mdb"

对于其它的情况都要写出数据库的绝对路径,要不然程序运行时就会出错。

这样,当程序一运行时就会在窗体的DataGrid中显示数据库所有记录的内容。此时,你就可以自由地在DataGrid中修改、编辑、添加、删除记录了(当然也可以阻止这些操作)。尽管我们用程序把DataGrid与数据集实现了绑定,但被更改的内容是不会自动保存的,必须编写代码来实现。图二中的“更新”按钮对应的代码是:

Da.UpdateCommand = Cbd.GetUpdateCommand

Da.Update(Dsstock, "stock")

要正确执行这段程序,必须保证数据库中有一个主键(Primary Key)。否则,程序运行时会出错,并且记录也不会真正修改。因为UpdateCommand命令要求数据库(表)必须有一个主键。

图二中的“取消更新”按钮对应的代码是:

Dsstock.RejectChanges()

刚在我们使用的是Access数据库,如果是SQL Server数据库又怎么操作呢?它们的操作方法、过程以及代码的编写几乎完全一样,只是数据库的驱动程序不同而已。如果是通过Imports System.Data和Imports System.Data.OleDb二个语句来引入对象,则Conn的写法是:

conn = "Provider=SQLOLEDB.1;Password=123456;Persist Security Info=True;User ID=sa; Initial

Catalog=JTH;Data Source=WEBMASTER"

在这里我们假设SQL Server 2000服务器的名称是WEBMASTER,用户名是sa,密码是123456,我们要访问的是该服务器中的JTH数据库下面的Stock数据表,Stock数据表的内容跟图二显示的完全一样。

对于SQL Server 7.0以上的数据库,我们还可以通过Imports System.Data

Imports System.Data.SqlClient二个语句来引入对象,这实际上是使用SqlDataAdapter对象访问SQL Server 2000数据库。这是微软所倡导的使用数据库对象来访问SQL Server 2000数据库的新方法。这种方法跟引用OleDbDataAdapter对象来访问SQL Server 2000数据库的方法几乎完全一样。除了引入对象语句不同外,只要把程序中的所有OleDbDataAdapter修改为SqlDataAdapter就可以了。

三 使用文本框显示数据库记录

使用文本框可以逐条显示数据库的记录,程序运行时的界面如图三所示。引用对象与定义公用变量的操作几乎完全一样,只不过这里增加了下面二个公用变量:

Dim StrCom As String '定义SQL查询字符串

Dim MyBind As BindingManagerBase '创建BindingManagerBase对象

窗体装载事件的代码是:

Conn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\stock.mdb"

Stockconnection.ConnectionString = Conn

StrCom = " SELECT * FROM stock "

Dim Cmd As New OleDbCommand(strCom, Stockconnection)

Da = New OleDbDataAdapter(Cmd)

Cbd = New OleDbCommandBuilder(Da)