65.9K
CodeProject 正在变化。 阅读更多。
Home

ADO.NET 面试题:第一部分

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.81/5 (39投票s)

2008年8月25日

CPOL

10分钟阅读

viewsIcon

286199

Ado Dot Net 面试题 第 1 部分。

目录

引言

在本节中,我们将介绍 .NET 数据库访问中的一个重要概念。

我之前发布的架构师面试题系列的前几部分

UML 面试题 第一部分:SoftArch5.aspx

祝您求职愉快......

(B) .NET 中包含数据功能类的命名空间是什么?

.NET 提供了以下用于数据管理的命名空间:

System.Data

它包含用于访问和存储关系数据的基本对象,例如 DataSetDataTableDataRelation。这些对象中的每一个都独立于数据源的类型以及我们连接它的方式。

System.Data.OleDB

它包含我们通过 OLE-DB 提供程序连接到数据源所使用的对象,例如 OleDbConnectionOleDbCommand 等。这些对象继承自通用基类,因此与 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)的访问。简而言之,它提供了一个对象来实现诸如打开和关闭连接、检索数据和更新数据等功能。在下图,您可以看到数据提供程序的四个主要部分:

图:9.1 ADO.NET 体系结构
  • Connection(连接)。
  • Command object(命令对象)(这是使用存储过程的对象)。
  • Data Adapter(数据适配器)(此对象充当数据存储和数据集之间的桥梁)。
  • Data Reader(数据读取器)(此对象以仅向前模式从数据存储中读取数据)。
  • DataSet 对象代表断开连接的缓存数据。如果您查看图表,它并没有直接连接到数据存储(SQL Server、Oracle 等),而是与数据适配器通信,数据适配器负责填充数据集。数据集可以包含一个或多个数据表和关系。
  • DataView 对象用于对数据表中的数据进行排序和筛选。

注意:这是 .NET 面试中的一个热门问题。只需将图片印在脑海中,然后在面试时尝试参考图片。

(B) ADO.NET 中有两个基本对象是什么?

DataReaderDataSet 是 ADO.NET 中的两个基本对象。

(B) DataSet 和 DataReader 之间有什么区别?

以下是 DataSetDataReader 之间的一些主要区别:

  • DataReader 提供仅向前、只读的数据访问,而 DataSet 对象可以包含来自同一数据源的一个以上的表(换句话说,一个以上的行集)以及它们之间的关系。
  • DataSet 是一个断开连接的体系结构,而 DataReader 是一个连接的体系结构。
  • DataSet 可以持久化内容,而 DataReader 不能持久化内容,它们是仅向前的。

(I) 经典 ADO 和 ADO.NET 之间有哪些主要区别?

以下是一些主要区别:

  • 在 ADO 中,我们有一个 Recordset,而在 ADO.NET 中,我们有一个 DataSet
  • Recordset 中,我们只能有一个表。如果我们要容纳多个表,我们需要进行内连接并填充 RecordsetDataSet 可以包含多个表。
  • 所有数据都以 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 对象中创建具有所有相应约束的空表。

调用相应的 InsertCommandUpdateCommandDeleteCommand 以处理 DataSet 中插入、**更新**或删除的每一行,以便使用对 DataSet 内容所做的更改来更新原始数据源。这有点像 ADO Recordset 对象提供的 UpdateBatch 方法,但在 DataSet 中,它可以用于更新多个表。

  • Fill
  • FillSchema
  • 更新

(B) DataSet 对象是什么?

DataSet 为关系数据的断开连接存储和操作提供了基础。我们从数据存储中填充它,在与该数据存储断开连接的情况下对其进行操作,然后根据需要重新连接并刷新更改回数据存储。

(B) DataSet 中包含哪些对象?

DataSetTables 集合中包含一个 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”。

图:9.2 为示例将“Nwind.mdb”加载到 SQL SERVER 中

图:9.3 仅加载 Employee 表。

为简单起见,我们将仅导入 employee 表,因为这是我们示例代码中唯一需要的内容。

图:9.4 已加载 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,则表示数据读取器已到达末尾,没有更多数据可读。
  • 不要忘记关闭连接对象。

如需进一步阅读,请观看以下面试准备视频和分步视频系列。

© . All rights reserved.