系统之家论坛

 找回密码
 立即注册
查看: 1395|回复: 1

21天学通VB.NET 第十二章的学习笔记[原创]

[复制链接]

中级会员

0

主题

270

帖子

418

积分

中级会员

云瑞将军

Rank: 3

积分
418
发表于 2008-8-3 16:03:43 | 显示全部楼层 |阅读模式
Chapter 12

在.NET里面,数据访问是通过System.Data域的类来进行的。该域分成两个不同的部分:System.Data.OleDB的类和System.DataSQLClient的类。System.Data.OleDB使你能够连接到任何有OLEDB提供者或者通过OLEDB提供者的ODBC驱动程序的数据库。System.DataSQLClient用来提供一套和OLEDB类相似的函数集以用来操作Microsoft SQL Server。

标准数据库任务
1 连接数据库
一个到数据库的连接,代表和存储了所有数据库需要寻找记录的信息。
Microsoft Data Link文件
步骤:
      1创建一个新文本文件,将该文件的扩展名改为udl,建立Microsoft Data Link文件。
      2 双击该文件,将会弹出一个包含四个页面的对话框,可在里面创建和编辑数据库的连接信息。
      3 第一个页面。选取数据提供者,根据需要为你的数据库选取正确的信息。
如果是Access数据库,选择Microsoft Jet 4.0 provider;
如果是SQL Server或MSDE数据库,选择Microsoft OLEDB Provider for SQL Server。
       4 在连接那个页面里面,取决你上一步选取哪种数据提供者,你将会看到不同的选项。
如果是Access,你只需要提供数据库文件的路径。
如果是SQL,就需要提供服务器的名称(如果和SQL Server 在同一台计算机上,填入local)、用户名和密码、以及你想要链接的数据库的名称。
       5 尽管还有两个页面,但你已经输入所有必要的信息了。你可以点击测试连接按钮来测试你输入的信息是否正确。如果测试成功,你可以点击确定关闭这个对话框。现在,你可以用记事本或别的编辑器来打开这个.udl文件,检查里面的内容。准确的信息由你具体输入的信息决定。
通过以上步骤可以得到连接字符串,紧接着,你就可以写连接数据库的代码了。
当你需要建立一个连接的时候,你需要建立一个System.Data.OleDB.OLEDBConnection 实例或System.Data.sqlClinet.SQLConnection 对象。如果你是连接到MSDE或SQL Server,那么连接字符串在你使用SQLConnection对象之前需要做一点修改,因为这里无需指定提供者,当使用SQL类时,就要把它去掉。
用OLEDBConnection的Open方法来建立和数据库之间的连接。
示例代码:
Module Module1
    Private Const sconnection As String = "数据库连接字符串"

    Sub Main()
        Dim objconn As New System.Data.OleDb.OleDbConnection(sconnection)
' 如果是SQL数据库,只需将其改为 system.data.sqlClinetConnetion 就可以了。
        Try
            objconn.Open()
        Catch ex As System.Exception
            Console.WriteLine(ex.Message)
        End Try
        Console.WriteLine()
    End Sub

End Module

2 执行SQL语句
为了对数据记录进行添加、删除、修改和取得记录等操作,必须使用command对象(SQL Command 或OleDBCommand)来指定,继而执行一个SQL语句。在使用command对象之前,你需要一个你想要执行的SQL语句和一个Connection(SQLConnection或OleDBConnection)对象。在执行command的时候必须打开Connection对象。

Module Module1
    Private Const sconnection As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\编程区\VB.NET工程\db1.mdb"

    Sub Main()
        Dim sSQL As String
        sSQL = "INSERT INTO 客人(客人ID,名字,移动电话)VALUES (5,虚竹,13811011011)"
        Dim objconn As New System.Data.OleDb.OleDbConnection(sconnection)
        Dim objcmd As New System.Data.OleDb.OleDbCommand(sSQL, objconn)
        Try
            objconn.Open()
        Catch ex As System.Exception
            Console.WriteLine(ex.Message)
        End Try
        Console.WriteLine("press return to execute query:{0}", sSQL)
        Console.WriteLine()
        If objconn.State = ConnectionState.Open Then
            Try
                objcmd.ExecuteNonQuery()
            Catch ex As Exception
                Console.WriteLine(ex.Message)
                Console.WriteLine()
            End Try
        End If
        Console.WriteLine()
    End Sub
End Module

3 取得数据
如果需要返回数据行,就需要使用ExecuteReader方法了,在不同情况下会返回OLEBDataReader或SQLDataReader。它有很多方法和属性。Read方法会使它指向下一条数据记录,并且返回一个布尔值表示是否还有更多的的数据行。只要你在某一行记录上(在调用Reader()之后),你就可以用各种Get<数据类型>的方法来得到各列中的值。
数据集(DataSets)
.NET提供了通过数据集(System.Data.DataSet)来完全非连接的访问数据的模型。数据集能够从数据库里面得到信息,独立于数据源,可以在离线的环境下保持数据。
数据适配器(Data Adapter),包括SQLData Adapter和OleDBData Adapter,用来提供一个在数据库和数据集之间的桥梁。作用:填充数据集,将之后的数据更改传回数据源。在更新数据前,必须先载入数据。首先建立一个connection对象,然后一个新的数据配适器的实例被创建。使用SQL语句,这个connection对象在数据配适器的构造函数里面将会建立这个数据集。
因为你需要用一个查询的结果填充一个数据集,一个数据集对象必须被创建。
在connection对象被成功打开以后,可以用数颈椎病枕头护肤abs belly fat晒后什么减肥药比较好眼霜减肥产品排行榜最好丰胸推荐洗面去皱效果好的眼霜护肤如何减掉腹部赘肉化妆水30岁用什么眼霜好外用减肥去角质产品什么牌子好红血丝23岁用什么护肤品好据配适器的Fill方法,将数据载入数据集。一旦数据表建立,就可以通过这个数据集的表集合操作里面的数据了。
Data Table 对象提供了两个特别有用的集合:行集合(Rows Collections),包含了这个表里的所有记录;列集合(Columns Collections),包含一组用来描述这个表里面每一列的Data Column对象。
使用For Each循环
Dim objRow as DataRow
For Each objRow In objTable.Rows
     ........
Next
使用For 循环
Dim i as integer
Dim objRow as DataRow
For i = 0 to objTable.Rows.cCount-1
    objRow=objTable.Row(i)
    ........
Next

两个方法产生的结果相同,表里面每一个单独的记录都可以表示成一个DataRow对象。这个对象用它的属性提供了访问列的方法以及一些其他有用属性,如RowState就返回当前记录的编辑状态。列集合包含了这个Data Table里面列的详细信息,每一个都可以表示一个Data Column对象。通过这个集合,你可以得到所有的有关这个表的信息。

显示一个DataTable表的内容
Sub displayTable (ByRef objTable as DataTable)
Dim objRow as DataRow
Dim objCol as DataColumn
Dim i,j as integer
For j=0 to objTable.Columns.Count-1
objCol=objTable.Column(j)
Console.write("{0}:{1}",objCol.ColumnName,objCol.DataType.Name)
Next
Console.writeline()

For i=0 to objTable.Rows.Count-1
objRow=objTable.Rows(i)
For j=0 to objTable.Column.Count-1
console.writeline("{0},objCol.Row.Iterm(j))
Next
Console.writeline()
Next
End Sub
对数据集的修改会被数据适配器翻译成相应的SQL语句,这些语句将在数据库上面执行。

添加记录
当建立连接以及数据适配器,并且将数据载入到数据集里面以后,就可以直接访问DataTable对象了。数据集本身提供了Add方法来创建新记录。可通过一个这个新记录的列值数组,或者通过一个代表了所需要添加的信息的DataRow对象。另外就是通过DataRow来调用它。这需要先得到一个同样的列结构(包括数据类型和大小)的新的Row对象,然后通过DataTable本身提供的NewRow方法来添加数据。
修改记录
可以通过表示表记录的DataRow对象来修改。每个DataRow都有好几个方法可以直接影响编辑:BeginEdit,EndEdit 和CancelEdit。BeginEdit和EndEdit是将DataRow置入或者脱离编辑模式。编译模式是一种特殊模式,这中间Row会记录每一次编辑,并且真正的修改不会每一次都发生。如果BeginEdit被使用,那么当EndEdit被调用的时候,这行就被确认修改并且进入了DataTable。这时候,任何编辑状态下的错误会被ADO.NET发现并抛出。
删除记录
从一个数据表里面删除记录可以使用相应的DataRow的Delete方法。Delete方法将需要删除的行标记为“删除”,但是并不真正的把它们从DataRowCollection里面删除掉。因此这个对象才可以被恢复,最终删除这条记录,必须给数据库必要的信息。此外,DataRowCollection的Remove、Remove At方法可以带一个DataRow参数。如果要保留所有数据集上的修改并更新数据源的表,那么你就需要使用Delete方法。
更新数据库
当修改、添加、删除记录后,需要更新数据源,否则这些修改都是无效的。
数据适配器具有SelectCommand(从数据库中读取数据)、UpdateCommand、DeleteCommand和InsertCommand命令(修改、删除、添加)。这些对象在给属性赋值之前必须创建并初始化。
如果想使用自动生成的命令,就需要数据集包含必要的主码信息。
首先,需要手工指定一个DataTable的主码,这个主码被设置到一个合适的列上,并且你可以通过DataTable来得到这个列集合。也可以通过数据配适器从数据源得到合适的信息,包括主码和其他的一些数据表的细节。在载入DataTable之前先创建FillSchema方法的对象,然后将表的结构、主码信息和其他一些细节注入其中,从而恢复数据有本来的数据结构。
最后,在数据载入期间使用数据适配器来创建必要的表结构信息,在调用Fill方法之前设置MissSchemaAction属性即可。AddWithKey是必须的。因为如果表结构不存在,添加默认值将会自动创建列信息,AddWithKey添加了相同的列结构信息,同时会设置所有它填充的表里面的primaryKey的属性。不管用哪种方法,在含有主码信息的DataTable被更新之后,Update、Insert、Delete命令就会被自动生成。一个合适的命令构造类的实例必须首先被创建并初始化,然后这个适配器的Update方法被调用,所有丢书的命令如果需要的话都会被创建。
创建两个表之间的关系,需要使用Relations的Add方法。

视图
视图是一种指定排序,过滤行和基于RowState(修改、删除、没有改变或更新)过滤的能力。创建时,可通过DefailtView属性来访问,或通过数据集自己的Relations集合访问。
DataView(数据视图)可以绑定到windows窗体控件,也可以通过DataRowView对象的集合来直接访问它的内容。

数据绑定
数据绑定提供了用户界面和数据源之间的桥梁。当一个用户界面的元素被绑定到一个数据源之后,对数据源的修改会反映到这个用户界面上,而且用户界面上数据的修改也会相反的对数据源进行更新。数据绑定包含了所有处理用户操作的复杂代码,而且无需写代码就可以实现用户和数据之间的交互。.NET中对绑定的数据集没有限制,所有的信息都可以绑定。
Windows窗体的数据绑定
所有的windows窗体控件都支持数据绑定。绑定分:简单绑定——控件相关联的是数据源里面的一个列;复杂绑定——控件相关联的是一个复杂的数据源,复杂绑定在内置的对象里面仅被DataGrid和组合框支持。
简单绑定
支持简单绑定的控件会有一个DataBindings集合,这个集合可以用来和数据域联系。
复杂数据绑定
将一个控件绑定到整个数据源,就是复杂数据绑定。要实现数据绑定,需要设置控件的DataSource属性到适当的对象上。如果DataSource包含了一个以上的可绑定的对象,我们就需要在DataMember属性里面指定相应的字符串——表名。

总结:数据库访问在.NET中被完全重新地设计了,但仍支持一些基本的OLEDB技术,使得OLEDB提供者的驱动程序,可以写出在任何数据库上运行的代码。如果使用离线的数据集,可以创建完全交互的系统,并且不占用宝贵的数据库连接资源。当你真正的创作用户界面的时候,数据绑定提供了一种快速和简单的方法用来在windows窗体里面显示你的数据。
http://hi.baidu.com/kingpheonix
http://blog.sina.com.cn/kingace
http://www.zerofox.cn/bbs/index.php

中级会员

0

主题

229

帖子

236

积分

中级会员

Rank: 3

积分
236
发表于 2008-8-3 17:27:30 | 显示全部楼层
一点也没看懂 晕:yunl
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

系统之家论坛

GMT+8, 2024-5-19 13:24 , Processed in 0.015907 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz!

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表