⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.txt

📁 ADO.NET 数据库实例教程
💻 TXT
📖 第 1 页 / 共 2 页
字号:
1 ADO.NET 数据库实例教程  
 
  
    
   
   ADO.NET数据库编程比较复杂,名目繁多的类、对象、属性、方法让每一个编程者都感觉恼火。本文旨在介绍ASP.NET Beta2数据库编程的主要内容,帮助编程者最快的了解ADO.NET数据库编程的精髓。 

  一、 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:sffsitedbusers.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) -根据字段名取得字段序号 
 
 
  
 作者:周继平    2006-2-26 12:31   回复此发言    
 
--------------------------------------------------------------------------------
 
2 ADO.NET 数据库实例教程  
 
    GetString(x)  

    GetTimeSpan(x)  

    GetValue(x)  

    GetValues(values())  

  以上方法都是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:sffsitedbusers.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。 

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

  DataTables 

  DataTable就是一个数据表,我们可以对这个表进行如:增加数据、修改数据等操作。我们也可以通过DataSet建立一个DataTable: 

Dim dtable As DataTable = ds1.Tables("people")  
 
 
  
 作者:周继平    2006-2-26 12:31   回复此发言    
 
--------------------------------------------------------------------------------
 
3 ADO.NET 数据库实例教程  
 
  这样,将DataSet的表People的结构和数据拷贝到了DataTable中,尽管它是无连接的,但是仍然可以通过修改这个DataSet来更新DataSet表,因此,如果我们在dtable中增加一列并且接受改变就以实现对DataSet的修改: 

Dim row as DataRow = dtable.NewRow() 
row(0) = "Philip" 
row(1) = "Quinn" 
dtable.Rows.Add(row) 
dtable.AcceptChanges  

  这样我们就建立了一个新的DataRow,这和用dtable.NewRow()建立一个新的数据列一样,我们还可以给这个列取名了Fname。 

  因为以上的DataTable来自DataSet,如果我们使用dtable.AcceptChanges方法更新DataTable,DataSet也会被更新: 

<%@ Import Namespace="System.Data" %> 
<script language="VB" runat="server"> 
Sub Page_Load(sender as object, e as eventargs) 
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 dtable2 As DataTable = ds1.Tables("people") 

Dim row as DataRow = dtable2.NewRow() 
row(0) = "Philip" 
row(1) = "Quinn" 
dtable2.Rows.Add(row) 
dtable2.AcceptChanges 

Response.Write(ds1.Tables("people").Rows(0)("FName").ToString) 
End Sub 
</script>  

  以上代码将显示"Philip",现在我们来看看具体过程: 

  1、 建立一个DataSet和一个叫"People"的DataTable; 

  2、 增加三个数据列并且设置它们的数据属性; 

  3、 将它们加入到DataSet; 

  4、 建立另外一个DataTable,这个DataTable是刚才建立的那个的拷贝; 

  5、 用DataTable建立新的DataRow并加入数据; 

  6、 接受数据改变同时更新了DataSet; 

  7、 显示第一个数据列; 

  DataRows 

  DataRow是DataTable的数据列,刚才我们已经看到,我们可以使用DataTable的以下方法建立一个新的DataRow: 

ds1.Tables("people").Rows(0)("FName") = "Phil"  

  以上语句中,ds1.Tables("people")选择表"people",.Rows(0)选择表的第一行,("FName")选择表的字段为"Fname"。 

  DataRows是数据列的集合,通过以下语句取得: 

Dim drow as DataRowCollection = ds1.Tables("people").Rows  

  对于DataRows,我们基本上不能做太多。如果针对一个具体的数据列,我们可以这样: 

Dim drow2 as DataRow = drow.Item(0)  

  需要修改这个列的数据,可以这样: 

drow2(0) = "Philip" 
drow2.AcceptChanges  

  可能说了那么多,我们都觉得比较复杂,我们来看看这个图示: 


  

  通过这个图示我们很容易就理清了DataSet、DataTable、DataRowCollection、DataRows、DataColumn和DataColumnCollection之间的相互关系。 


  三、 DataSet的使用 

  在第一章我们介绍了数据连接、执行查询等内容,第二章我们介绍了DataSet的方方面面,这一章我们将具体使用DataSet。 

DataSet <-> Data Source  

  DataSet和Data Source通过DataAdapter进行联系,当DataSet取得数据库数据以后,就和数据库断开连接,针对数据作的所有数据修改在没有提交以前都在DataSet里面保存。 

  数据修改 

  我们将通过一个小的举例来说明数据怎样被修改和提交。 

  这是数据结构(Access设计) 

Field Name Type FName  LName ID   
FName Text Philip Quinn  1  
LName  Text Joesph Payne 2  
ID AutoNumber Douglas Adams  3  
    Michael Okuda 4  


   举例一: 
 
 
  
 作者:周继平    2006-2-26 12:31   回复此发言    
 
--------------------------------------------------------------------------------
 
4 ADO.NET 数据库实例教程  
 
  我们将一段一段的看程序代码: 

<%@ Page Language="VB" %> 

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

  以上代码导入NameSpace同时说明编程语言为VB; 

Dim objConn as New OleDBConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=e:sffsitedb est.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")  

  以上代码建立了Connection、DataAdapter和CommandBuilder,并且填充了DataSet。我们必须注意以下几点: 

  一、 DataAdapter是数据和DataSet之间的桥梁; 

  二、 CommandBuilder建SQL语句来执行; 

Dim drow as DataRow  

  以上语句声明一个DataRow; 

drow = ds.Tables("users").NewRow() 

drow(0) = "Gene" 
drow(1) = "Rodenberry" 
ds.Tables("users").Rows.Add(drow) 

drow = ds.Tables("users").NewRow() 

drow(0) = "Maxwell" 
drow(1) = "Stewart" 
ds.Tables("users").Rows.Add(drow)  

  以上代码为DataSet增加一个新的列; 

objAdapter.Update(ds, "users")  

  以上代码将更新提交到数据库; 

End Sub 
</script>  

  现在看看数据库,会发现已经多了两列。 

  另外一个举例 

  我们可以看一个完整的举例: 

<%@ Page Language="VB" Debug="true" %> 

<%@ 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:sffsitedb est.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") 

Dim drow as DataRow 

drow = ds.Tables("users").Rows(1) 

drow(0) = "Joseph" 

ds.Tables("users").Rows(0).AcceptChanges 

objAdapter.Update(ds, "users") 

End Sub 
</script>  

  总结: 

  以上我们知道了怎样更新DataSet的数据,可能那些并不是特别实用,下一章我们将涉及到用较好的方式显示数据和通过TextBox修改数据。 


  四、数据显示和修改 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -