ADO.NET 面试题:第一部分






3.81/5 (39投票s)
Ado Dot Net 面试题 第 1 部分。
目录
- (B) .NET 中包含数据功能类的命名空间是什么?
- (B) 您能概述一下 ADO.NET 体系结构吗?
- (B) ADO.NET 中有两个基本对象是什么?
- (B) DataSet 和 DataReader 之间有什么区别?
- (I) 经典 ADO 和 ADO.NET 之间有哪些主要区别?
- (B) Connection 对象的用途是什么?
- (B) Command 对象的用途是什么?
- (B) Data Adapter 的用途是什么?
- (B) Data Adapter 的基本方法有哪些?
- (B) DataSet 对象是什么?
- (B) DataSet 中包含哪些对象?
- (B) 如何连接到 Microsoft Access、FoxPro 和 Oracle 等?
- (B) 如何连接到 SQL Server,使用哪个命名空间?
引言
在本节中,我们将介绍 .NET 数据库访问中的一个重要概念。
我之前发布的架构师面试题系列的前几部分
- 第一部分 - SoftArchInter1.aspx
- 第二部分 - SoftArch2.aspx
- 第三部分 - SoftArch3.aspx
- 第四部分 - SoftArch4.aspx
UML 面试题 第一部分:SoftArch5.aspx
祝您求职愉快......
(B) .NET 中包含数据功能类的命名空间是什么?
.NET 提供了以下用于数据管理的命名空间:
System.Data
它包含用于访问和存储关系数据的基本对象,例如 DataSet
、DataTable
和 DataRelation
。这些对象中的每一个都独立于数据源的类型以及我们连接它的方式。
System.Data.OleDB
它包含我们通过 OLE-DB 提供程序连接到数据源所使用的对象,例如 OleDbConnection
、OleDbCommand
等。这些对象继承自通用基类,因此与 SqlClient
等效对象具有相同的属性、方法和事件。
System.Data.SqlClient
它包含我们通过 Microsoft SQL Server 的 Tabular Data Stream (TDS) 接口(仅限)连接到数据源所使用的对象。这通常可以提供更好的性能,因为它省略了 OLE-DB 连接所需的一些中间层。
System.XML
它包含根据 W3C 建议创建、读取、存储、写入和操作 XML 文档所需的基本对象。
(B) 您能概述一下 ADO.NET 体系结构吗?
ADO.NET 体系结构中最重要的概念是“数据提供程序”。数据提供程序提供对数据源(SQL Server、Access、Oracle)的访问。简而言之,它提供了一个对象来实现诸如打开和关闭连接、检索数据和更新数据等功能。在下图,您可以看到数据提供程序的四个主要部分:
- Connection(连接)。
- Command object(命令对象)(这是使用存储过程的对象)。
- Data Adapter(数据适配器)(此对象充当数据存储和数据集之间的桥梁)。
- Data Reader(数据读取器)(此对象以仅向前模式从数据存储中读取数据)。
- DataSet 对象代表断开连接的缓存数据。如果您查看图表,它并没有直接连接到数据存储(SQL Server、Oracle 等),而是与数据适配器通信,数据适配器负责填充数据集。数据集可以包含一个或多个数据表和关系。
- DataView 对象用于对数据表中的数据进行排序和筛选。
注意:这是 .NET 面试中的一个热门问题。只需将图片印在脑海中,然后在面试时尝试参考图片。
(B) ADO.NET 中有两个基本对象是什么?
DataReader
和 DataSet
是 ADO.NET 中的两个基本对象。
(B) DataSet 和 DataReader 之间有什么区别?
以下是 DataSet
和 DataReader
之间的一些主要区别:
DataReader
提供仅向前、只读的数据访问,而DataSet
对象可以包含来自同一数据源的一个以上的表(换句话说,一个以上的行集)以及它们之间的关系。DataSet
是一个断开连接的体系结构,而DataReader
是一个连接的体系结构。DataSet
可以持久化内容,而DataReader
不能持久化内容,它们是仅向前的。
(I) 经典 ADO 和 ADO.NET 之间有哪些主要区别?
以下是一些主要区别:
- 在 ADO 中,我们有一个
Recordset
,而在 ADO.NET 中,我们有一个DataSet
。 - 在
Recordset
中,我们只能有一个表。如果我们要容纳多个表,我们需要进行内连接并填充Recordset
。DataSet
可以包含多个表。 - 所有数据都以 XML 形式持久化,而经典 ADO 中的数据以二进制格式持久化。
(B) Connection 对象的用途是什么?
它们用于将数据连接到 Command
对象。
OleDbConnection
对象与 OLE-DB 提供程序一起使用。SqlConnection
对象使用 Tabular Data Services (TDS) 与 MS SQL Server 一起使用。
(B) Command 对象的用途是什么?
它们用于将 Connection
对象连接到 DataReader 或 DataSet
。以下是 Command
对象提供的方法:
针对 Connection
属性中定义的连接,执行 CommandText
属性中定义的命令,该命令不返回任何行(UPDATE、DELETE 或 INSERT)。返回一个整数,指示受查询影响的行数。
针对 Connection
属性中定义的连接,执行 CommandText
属性中定义的命令。返回一个连接到数据库中结果行集的“读取器”对象,允许检索行。
针对 Connection
属性中定义的连接,执行 CommandText
属性中定义的命令。仅返回单个值(实际上是结果行集的第一行的第一列,任何其他返回的列和行都将被丢弃)。当只需要一个“单例”值时,它快速高效。
ExecuteNonQuery
ExecuteReader
ExecuteScalar
(B) Data Adapter 的用途是什么?
这些对象将一个或多个 Command
对象连接到 DataSet
对象。它们提供从数据存储获取数据并填充 DataSet
中表的逻辑,或者将 DataSet
中的更改推回数据存储。
OleDbDataAdapter
对象与 OLE-DB 提供程序一起使用。SqlDataAdapter
对象使用 Tabular Data Services 与 MS SQL Server 一起使用。
(B) DataAdapter 的基本方法有哪些?
这些是 DataAdapter
最常用的方法:
执行 Select 命令以使用数据源中的数据填充 DataSet
对象。如果 DataSet
中的表存在主键,它也可以用于使用原始数据源中发生的更改来更新(刷新)DataSet
中现有的表。
使用 SelectCommand
从数据源中提取表的架构,并在 DataSet
对象中创建具有所有相应约束的空表。
调用相应的 InsertCommand
、UpdateCommand
或 DeleteCommand
以处理 DataSet
中插入、**更新**或删除的每一行,以便使用对 DataSet
内容所做的更改来更新原始数据源。这有点像 ADO Recordset
对象提供的 UpdateBatch
方法,但在 DataSet
中,它可以用于更新多个表。
Fill
FillSchema
更新
(B) DataSet 对象是什么?
DataSet
为关系数据的断开连接存储和操作提供了基础。我们从数据存储中填充它,在与该数据存储断开连接的情况下对其进行操作,然后根据需要重新连接并刷新更改回数据存储。
(B) DataSet 中包含哪些对象?
DataSet
在 Tables
集合中包含一个 DataTable
对象集合。每个 DataTable
对象包含一个 DataRow
对象集合和一个 DataColumn
对象集合。还有用于该表中使用的主键、约束和默认值的集合,这称为约束集合,以及表之间的父子关系。最后,每个表都有一个 DefaultView
对象。这用于基于表创建 DataView
对象,以便在显示数据时可以搜索、筛选或以其他方式操作数据。
注意:回顾 ADO.NET 体系结构的主图,以图示方式可视化此答案。
(B) 如何连接到 Microsoft Access、FoxPro 和 Oracle 等?
Microsoft 提供了 System.Data.OleDb
命名空间来与 Access、Oracle 等数据库进行通信。简而言之,任何 OLE DB 兼容的数据库都可以使用 System.Data.OldDb
命名空间进行连接。
注意:在 WindowsAppOleDb 中提供了一个小的 OLEDB 示例,它使用 bin 目录中的 Nwind.mdb 在列表框中显示数据。
Private Sub loadData()
Dim strPath As String
strPath = AppDomain.CurrentDomain.BaseDirectory
Dim objOLEDBCon As New OleDbConnection(“Provider=Microsoft.Jet." & _
"OLEDB.4.0;Data Source =” & strPath & “Nwind.mdb”)
Dim objOLEDBCommand As OleDbCommand
Dim objOLEDBReader As OleDbDataReader
Try
objOLEDBCommand = New OleDbCommand(“Select FirstName from Employees”)
objOLEDBCon.Open()
objOLEDBCommand.Connection = objOLEDBCon
objOLEDBReader = objOLEDBCommand.ExecuteReader()
Do While objOLEDBReader.Read()
lstNorthwinds.Items.Add(objOLEDBReader.GetString(0))
Loop
Catch ex As Exception
Throw ex
Finally
objOLEDBCon.Close()
End Try
End Sub
主要代码在 LoadData
方法中,该方法实际上将数据加载到列表框中。
注意:此源代码在程序本身中硬编码了连接字符串,这不是一个好的编程实践。对于 Windows 应用程序,存储连接字符串的最佳位置是“App.config”。另外请注意,AppDomain.CurrentDomain.BaseDirectory
函数返回正在运行的 exe 的当前路径,即“BIN”,MDB 文件位于该目录中。另请注意,Finally
块会执行,无论是否发生错误。这确保了所有到数据存储的连接都被释放。将所有清理语句放在 Finally
块中是一个最佳实践,从而确保资源得到正确释放。
(B) 如何连接到 SQL Server,使用哪个命名空间?
下面是所需的代码。我们将更详细地尝试理解代码。对于此示例,我们还需要设置一个 SQL 表,我已经使用 DTS 向导导入了该表。
Private Sub LoadData()
' note :- with and end with makes your code more readable
Dim strConnectionString As String
Dim objConnection As New SqlConnection
Dim objCommand As New SqlCommand
Dim objReader As SqlDataReader
Try
' this gets the connectionstring from the app.config file.
' note if this gives error see where the MDB file is stored
' in your pc and point to thastrConnectionString = AppSettings.Item(“ConnectionString”)
' take the connectiostring and initialize the connection object
With objConnection
.ConnectionString = strConnectionString
.Open()
End With
objCommand = New SqlCommand(“Select FirstName from Employees”)
With objCommand
.Connection = objConnection
objReader = .ExecuteReader()
End With
' looping through the reader to fill the list box
Do While objReader.Read()
lstData.Items.Add(objReader.Item(“FirstName”))
Loop
Catch ex As Exception
Throw ex
Finally
objConnection.Close()
End Try
<appSettings>
<add key=”Connectionstring” value=”Server=ERMBOM1-IT2;User ID=sa;Database=Employees”/>
</appSettings>
注意:上面的代码在 CD 的 WindowsAppSqlClient 文件夹中提供。代码中的注释解释了很多内容,但我们稍后会详细介绍代码。LoadData
是加载 SQL Server 中数据的主方法。在运行此代码之前,您必须在计算机上安装 SQL Server。由于我们处理的是 SQLClient,因此我们需要在 SQL Server 中设置一个数据库。对于此示例,我已将 CD 中“SampleAccessDatabase”文件夹中的 Nwind.mdb 导入到 SQL Server 中。根据计算机的不同,您需要更改 Web.config 文件中的连接字符串。
要设置示例 SQL 表,我们可以使用 DTS 导入向导导入该表。请参见下图,它使用 Microsoft Access 作为数据源。在导入数据库时,将数据库名称设置为“Employees”。
为简单起见,我们将仅导入 employee 表,因为这是我们示例代码中唯一需要的内容。
现在从面试角度来看,您肯定不会说出书中给出的整个源代码。面试官期望更广泛地回答连接到 SQL Server 所需的步骤。您只需要更广泛地解释 LoadData
方法。以下是连接到 SQL Server 的步骤:
With objConnection
.Connection String = strConnectionString
.Open ()
End With
ObjCommand = New SqlCommand (“Select First Name from Employees”)
With objCommand
.Connection = objConnection
Breeder = .Execute Reader ()
End With
Do while objReader.Read ()
lstData.Items.Add (objReader.Item (“First Name”))
Loop
注意:在 LoadData
中,您会看到连接字符串存储在 Web.config 文件中,并使用 AppSettings.Item(“ConnectionString”)
加载。在您的数据库上实时运行此示例时,请勿忘记根据您的计算机名称和 SQL Server 更改此连接字符串,否则源代码将无法运行。
- 首先导入命名空间“
System.Data.SqlClient
”。 - 按
LoadData
方法所示创建连接对象。 - 使用 SQL 创建命令对象。另外,将创建的连接对象分配给命令对象并执行读取器。
- 最后循环遍历读取器并将列表框填充。如果 VB 程序员期望 next 命令,它已被
Read()
替换,当有数据可读时,Read()
返回True
。如果Read()
返回False
,则表示数据读取器已到达末尾,没有更多数据可读。 - 不要忘记关闭连接对象。
如需进一步阅读,请观看以下面试准备视频和分步视频系列。