📜  ADO 和 ADO.NET 的区别(1)

📅  最后修改于: 2023-12-03 14:39:01.999000             🧑  作者: Mango

ADO 和 ADO.NET 的区别

ADO

ADO(ActiveX Data Objects)是一组使用COM编程接口的数据访问技术,用于在Windows平台上从.NET应用程序中访问数据。ADO位于操作系统的数据访问层和应用程序的数据访问代码之间,使得开发人员可以将程序与数据操作进行分离,从而简化了应用程序的开发过程。

ADO使用了COM技术,因此需要在系统上安装COM具有的运行库(如MDAC)。

ADO.NET

ADO.NET是.NET平台上的一种数据访问技术,它是ADO的一种进化,提供了更可靠、更稳定、更灵活和更快的数据访问方式。不同于ADO使用COM技术,ADO.NET使用.NET类库。

ADO.NET具有更多的数据提供程序,包括SQL Server、Oracle、MySQL、SQLite以及各种OLEDB和ODBC数据提供程序。开发人员可以根据需要选择相应的数据提供程序。

ADO.NET提供的DataSet和DataTable等对象都是.NET类,与.NET应用程序之间实现了更好的集成。

区别
  1. ADO使用COM技术,而ADO.NET使用.NET类库。

  2. ADO通过COM暴露了某些接口,而ADO.NET提供了一个更好的统一数据访问接口,这意味着从ADO.NET访问不同的数据源变得更加容易。

  3. ADO.NET拥有更多的数据提供程序,且具有更好的性能和可靠性。

  4. ADO的API以Recordset为基础,而ADO.NET的API以DataSet为基础。

  5. ADO.NET的DataSet可以在客户端进行数据的缓存和处理,而ADO只能从服务器一条记录一条记录地读取数据。

  6. ADO.NET提供的对象都是.NET类,与.NET应用程序间实现了更好的集成,开发效率更高。

代码示例

ADO.NET
// 使用SqlDataAdapter从SQL Server中读取数据
string sqlCommand = "SELECT * FROM Customers";
string connectionString = "Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;";
using(SqlConnection connection = new SqlConnection(connectionString)){
    SqlDataAdapter adapter = new SqlDataAdapter(sqlCommand, connection);
    DataSet dataSet = new DataSet();
    adapter.Fill(dataSet, "Customers");
    DataTable dataTable = dataSet.Tables["Customers"];
    foreach(DataRow row in dataTable.Rows){
        Console.WriteLine("{0} {1} {2}", row["CustomerID"], row["CompanyName"], row["ContactName"]);
    }
}
ADO
' 使用ADODB.Recordset从SQL Server中读取数据
Dim connection As ADODB.Connection
Set connection = New ADODB.Connection
connection.ConnectionString = "Provider=SQLOLEDB;Data Source=myServerAddress;" & _
                                "Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;"
connection.Open
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "SELECT * FROM Customers", connection
While Not rs.EOF
    Debug.Print rs("CustomerID") & " " & rs("CompanyName") & " " & rs("ContactName")
    rs.MoveNext
Wend