ADO.NET提供了两个主要的组件来访问和操作数据,它们分别是.NET Framework 数据提供程序和 DataSet,为了更好的进行数据库的程序设计,我们非常有必要了解下ADO.NET的工作机制。
.NET Framework 数据提供程序
.NET Framework 数据提供程序是专门为数据操作以及快速、只进、只读访问数据而设计的组件。
Connection 对象提供到数据源的连接。 使用 Command 对象可以访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。 DataReader 可从数据源提供高性能的数据流。 最后,DataAdapter 在 DataSet 对象和数据源之间起到桥梁作用。 DataAdapter 使用 Command 对象在数据源中执行 SQL 命令以向 DataSet 中加载数据,并将对 DataSet 中数据的更改协调回数据源。
下面用代码列表演示如何使用SQLServer、OLE DB、ODBC的 ADO.NET 技术从数据库中检索数据
SqlClient
假定可以连接到 Microsoft SQL Server 的 Northwind 示例数据库。代码创建一个 SqlCommand 以从 Products 表中选择行,并添加 SqlParameter 来将结果限制为其 UnitPrice 大于指定参数值的行。 SqlConnection 在 using 块内打开,这将确保在代码退出时会关闭和释放资源。示例代码使用 SqlDataReader 执行命令,并在控制台窗口中显示结果。
-
Option Explicit On
-
Option Strict On
-
-
Imports System
-
Imports System.Data
-
Imports System.Data.SqlClient
-
-
Public Class Program
-
Public Shared Sub Main()
-
' 定义连接字符串,并赋值
-
Dim connectionString As String = "Data Source=(local);Initial Catalog=Northwind;" & "Integrated Security=true"
-
-
' 提供了插叙字符串
-
Dim queryString As String ="SELECT ProductID, UnitPrice, ProductName from dbo.Products " & "WHERE UnitPrice > @pricePoint " & "ORDER BY UnitPrice DESC;"
-
-
Dim paramValue As Integer = 5
-
-
' 在Using块中创建和打开连接,确保所有的资源在使用完毕后能够关闭并释放
-
Using connection As New SqlConnection(connectionString)
-
-
' 创建连接和属性对象
-
Dim command As New SqlCommand(queryString, connection)
-
command.Parameters.AddWithValue("@pricePoint", paramValue)
-
-
' 在try/catch块中打开连接, 创建和执行数据阅览,把结构显示到控制台窗口
-
Try
-
connection.Open()
-
Dim dataReader As SqlDataReader = command.ExecuteReader()
-
Do While dataReader.Read()
-
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}" & vbTab & "{2}",dataReader(0), dataReader(1), dataReader(2))
-
Loop
-
dataReader.Close()
-
-
Catch ex As Exception
-
Console.WriteLine(ex.Message)
-
End Try
-
Console.ReadLine()
-
End Using
-
End Sub
-
End Class
-
OleDb
创建一个 OleDbCommand以从 Products 表中选择行,并添加一个 OleDbParameter来将结果限制为其 UnitPrice 大于指定参数值的行。 OleDbConnection在 using 块内打开,这将确保在代码退出时会关闭和释放资源。 示例代码使用 OleDbDataReader 执行命令,并在控制台窗口中显示结果。
-
Option Explicit On
-
Option Strict On
-
-
Imports System
-
Imports System.Data
-
Imports System.Data.OleDb
-
-
Public Class Program
-
Public Shared Sub Main()
-
-
Dim connectionString As String ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "c:\Data\Northwind.mdb;User Id=admin;Password=;"
-
-
' 提供了插叙字符串
-
Dim queryString As String = "SELECT ProductID, UnitPrice, ProductName from Products " & "WHERE UnitPrice > ? " & "ORDER BY UnitPrice DESC;"
-
-
' Specify the parameter value.
-
Dim paramValue As Integer = 5
-
-
'在Using块中创建和打开连接,确保所有的资源在使用完毕后能够关闭并释放
-
Using connection As New OleDbConnection(connectionString)
-
-
Dim command As New OleDbCommand(queryString, connection)
-
command.Parameters.AddWithValue("@pricePoint", paramValue)
-
-
Try
-
connection.Open()
-
Dim dataReader As OleDbDataReader = _
-
command.ExecuteReader()
-
Do While dataReader.Read()
-
Console.WriteLine( _
-
vbTab & "{0}" & vbTab & "{1}" & vbTab & "{2}", _
-
dataReader(0), dataReader(1), dataReader(2))
-
Loop
-
dataReader.Close()
-
-
Catch ex As Exception
-
Console.WriteLine(ex.Message)
-
End Try
-
Console.ReadLine()
-
End Using
-
End Sub
-
End Class
-
Odbc
创建一个 OdbcCommand以从 Products 表中选择行,并添加一个 OdbcParameter来将结果限制为其 UnitPrice 大于指定参数值的行。 OdbcConnection在 using 块内打开,这将确保在代码退出时会关闭和释放资源。 示例代码使用 OdbcDataReader 执行命令,并在控制台窗口中显示结果。
-
Option Explicit On
-
Option Strict On
-
-
Imports System
-
Imports System.Data
-
Imports System.Data.Odbc
-
-
Public Class Program
-
Public Shared Sub Main()
-
-
-
Dim connectionString As String = _
-
"Driver={Microsoft Access Driver (*.mdb)};" _
-
& "Dbq=c:\Data\Northwind.mdb;Uid=Admin;Pwd=;"
-
-
Dim queryString As String = _
-
"SELECT ProductID, UnitPrice, ProductName from Products " _
-
& "WHERE UnitPrice > ? " _
-
& "ORDER BY UnitPrice DESC;"
-
-
Dim paramValue As Integer = 5
-
-
-
Using connection As New OdbcConnection(connectionString)
-
-
Dim command As New OdbcCommand(queryString, connection)
-
command.Parameters.AddWithValue("@pricePoint", paramValue)
-
-
-
Try
-
connection.Open()
-
Dim dataReader As OdbcDataReader = _
-
command.ExecuteReader()
-
Do While dataReader.Read()
-
Console.WriteLine( _
-
vbTab & "{0}" & vbTab & "{1}" & vbTab & "{2}", _
-
dataReader(0), dataReader(1), dataReader(2))
-
Loop
-
dataReader.Close()
-
-
Catch ex As Exception
-
Console.WriteLine(ex.Message)
-
End Try
-
Console.ReadLine()
-
End Using
-
End Sub
-
End Class
-
DataSet
DataSet是专门为独立于任何数据源的数据访问而设计的。因此,它可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。 DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及有关 DataTable 对象中数据的主键、外键、约束和关系信息组成。
下图阐释了 .NET Framework 数据提供程序和 DataSet 之间的关系。
下面的示例由几种方法组成,这些方法互相结合,从Northwind 数据库中创建并填充DataSet。
-
Option Explicit On
-
Option Strict On
-
-
Imports System.Data
-
Imports system.Data.SqlClient
-
-
Public Class NorthwindDataSet
-
-
Public Shared Sub Main()
-
Dim connectionString As String = _
-
GetConnectionString()
-
ConnectToData(connectionString)
-
End Sub
-
-
Private Shared Sub ConnectToData(ByVal connectionString As String)
-
-
Using connection As SqlConnection = New SqlConnection(connectionString)
-
-
Dim suppliersAdapter As SqlDataAdapter =New SqlDataAdapter()
-
-
suppliersAdapter.TableMappings.Add("Table", "Suppliers")
-
-
connection.Open()
-
Console.WriteLine("The SqlConnection is open.")
-
-
Dim suppliersCommand As SqlCommand = New SqlCommand( "SELECT SupplierID, CompanyName FROM dbo.Suppliers;",connection)
-
suppliersCommand.CommandType = CommandType.Text
-
-
-
suppliersAdapter.SelectCommand = suppliersCommand
-
-
Dim dataSet As DataSet = New DataSet("Suppliers")
-
suppliersAdapter.Fill(dataSet)
-
-
Dim productsAdapter As SqlDataAdapter = New SqlDataAdapter()
-
productsAdapter.TableMappings.Add("Table", "Products")
-
-
Dim productsCommand As SqlCommand = New SqlCommand("SELECT ProductID, SupplierID FROM dbo.Products;"connection)
-
productsAdapter.SelectCommand = productsCommand
-
-
productsAdapter.Fill(dataSet)
-
-
connection.Close()
-
Console.WriteLine("The SqlConnection is closed.")
-
-
-
Dim parentColumn As DataColumn = dataSet.Tables("Suppliers").Columns("SupplierID")
-
Dim childColumn As DataColumn = dataSet.Tables("Products").Columns("SupplierID")
-
Dim relation As DataRelation = New System.Data.DataRelation("SuppliersProducts",parentColumn, childColumn)
-
dataSet.Relations.Add(relation)
-
-
Console.WriteLine("The {0} DataRelation has been created.", relation.RelationName)
-
End Using
-
-
End Sub
-
-
Private Shared Function GetConnectionString() As String
-
-
Return "Data Source=(local);Initial Catalog=Northwind;" & "Integrated Security=SSPI;"
-
-
End Function
-
End Class
选择 DataReader 或 DataSet
在决定应用程序应使用 DataReader还是应使用 DataSet时,应考虑应用程序所需的功能类型。 使用 DataSet 可执行以下操作:
-
在应用程序中将数据缓存在本地,以便可以对数据进行处理。 如果只需要读取查询结果,则 DataReader 是更好的选择。
-
在层间或从 XML Web services 对数据进行远程处理。
-
与数据进行动态交互,例如绑定到 Windows 窗体控件或组合并关联来自多个源的数据。
-
对数据执行大量的处理,而不需要与数据源保持打开的连接,从而将该连接释放给其他客户端使用。
如果不需要 DataSet 所提供的功能,则可以通过使用 DataReader 以只进、只读方式返回数据,从而提高应用程序的性能。 虽然DataAdapter 使用 DataReader 来填充DataSet 的内容,但使用 DataReader 可以提升性能,因为这样可以节省 DataSet 所使用的内存,并将省去创建 DataSet 并填充其内容所需的处理。
转载自:http://blog.csdn.net/zhang_xinxiu/article/details/8685424
阅读(1147) | 评论(0) | 转发(1) |