.NET 环境中的数据库交互OLE DB与SqlClient
ADO.NET 是 .NET 框架的基础数据访问技术,提供了与数据库直接交互的能力。SqlClient
是 ADO.NET 中用于访问 SQL Server 数据库的具体实现。
主要特点:
- 直接数据访问:允许开发者直接编写 SQL 查询或存储过程来操作数据库,提供了更细粒度的控制。
- 性能优化:相对于 ORM,ADO.NET 通常提供更高的性能,因为开发者可以直接控制查询和数据库交互。
- DataSet 和 DataTable:支持使用
DataSet
和DataTable
来处理数据,这对于需要在应用程序中处理离线数据的场景非常有用。 - 存储过程:支持调用存储过程和执行参数化查询,提高了安全性和性能。
在 SQL Server 的数据访问中,主要的类包括:
SqlConnection
:用于建立与 SQL Server 数据库的连接。SqlCommand
:用于执行 SQL 查询、存储过程或命令。SqlDataReader
:用于读取从数据库返回的数据流。SqlDataAdapter
:用于填充DataSet
和更新数据源。SqlParameter
:用于在 SQL 查询中传递参数。SqlTransaction
:用于管理数据库事务。
这些类都是 ADO.NET 的一部分,专门用于 SQL Server 的数据交互。
-------------------
OLE DB(Object Linking and Embedding, Database)是一个微软开发的接口标准,用于访问各种数据源。它是一个在 Windows 操作系统上运行的 API,允许应用程序通过统一的方式访问关系型数据库、电子表格、文本文件以及其他数据源。
主要特点:
-
统一数据访问: OLE DB 提供了一个统一的接口,允许应用程序通过相同的 API 访问不同类型的数据源,无论是 SQL Server、Oracle 还是 Excel 文件。
-
组件架构: OLE DB 采用组件化设计,包括:
- 数据源提供程序(Data Providers):实现了具体的数据访问功能。例如,SQL Server Native Client 是一个 OLE DB 数据源提供程序。
- 数据服务组件(Data Services Components):提供额外的数据服务,如事务处理和缓存管理。
- 数据消费者(Data Consumers):使用数据服务组件来获取和处理数据。
-
灵活性: OLE DB 支持各种数据存储格式,包括关系型和非关系型数据源。它不仅能访问 SQL 数据库,还能访问电子表格、文本文件等。
-
高性能: OLE DB 设计时考虑了性能,提供了高效的数据访问机制,特别是在处理大量数据时。
// Add necessary using directives
using System;
using System.Data;
using System.Data.SqlClient;class Program
{static void Main(){string connectionString = "Data Source=localhost;Initial Catalog=tsl;User ID=sa;Password=xxxxxx";string query = "SELECT CustomerId, CustomerName, Email FROM Employees";try{using (SqlConnection connection = new SqlConnection(connectionString)){SqlDataAdapter adapter = new SqlDataAdapter(query, connection);DataSet dataSet = new DataSet();adapter.Fill(dataSet, "Employees");DataTable employeesTable = dataSet.Tables["Employees"];// Modify data in the datasetforeach (DataRow row in employeesTable.Rows){// Corrected data type comparisonif (row["CustomerId"] != DBNull.Value && row["CustomerId"].ToString() == "12347"){row["CustomerName"] = "gggg";row["Email"] = "gggggxxx@example.com";}}// Manually set the update commandstring updateCommandText = "UPDATE Employees SET CustomerName = @CustomerName, Email = @Email WHERE CustomerId = @CustomerId";SqlCommand updateCommand = new SqlCommand(updateCommandText, connection);updateCommand.Parameters.Add("@CustomerName", SqlDbType.VarChar, 255, "CustomerName");updateCommand.Parameters.Add("@Email", SqlDbType.VarChar, 255, "Email");updateCommand.Parameters.Add("@CustomerId", SqlDbType.VarChar, 0, "CustomerId");adapter.UpdateCommand = updateCommand;// Update database with changesadapter.Update(dataSet, "Employees");// Display updated dataforeach (DataRow row in employeesTable.Rows){Console.WriteLine("CustomerId: {0}", row["CustomerId"]);Console.WriteLine("CustomerName: {0}", row["CustomerName"]);Console.WriteLine("Email: {0}", row["Email"]);Console.WriteLine();}Console.WriteLine("Data display completed.");}}catch (Exception ex){Console.WriteLine("An error occurred: {0}", ex.Message);}Console.ReadLine();}
}// SqlDataAdapter 类是ADO.NET中的一个重要组件,用于连接数据库并在 DataSet 和数据库之间传输数据。它充当了 DataSet 和关系型数据库之间的桥梁,负责填充数据集以及将数据集中的更改传输回数据库。
// 以下是 SqlDataAdapter 类的主要功能和用法:
// 数据填充(Data Population):SqlDataAdapter 可以执行 SQL 查询并将查询结果填充到 DataSet 中的一个或多个 DataTable 中。
// 数据更新(Data Update):SqlDataAdapter 可以将 DataSet 中的更改(如新增、修改、删除)传输回数据库。
// 数据加载(Data Loading):SqlDataAdapter 提供了 Fill 方法,可以从数据库中检索数据并填充到 DataSet 中。
// 数据同步(Data Synchronization):通过调用 Update 方法,SqlDataAdapter 可以将 DataSet 中的更改应用到数据库中,实现数据的同步。
using System;
using System.Data;
using System.Data.OleDb;class Program
{static void Main(){// 定义连接字符串(示例中连接到一个Excel文件)string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\file.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES;'";// 定义SQL查询string query = "SELECT * FROM [Sheet1$]";// 创建一个DataSet实例DataSet dataSet = new DataSet();// 创建OleDbConnection实例并打开连接using (OleDbConnection connection = new OleDbConnection(connectionString)){try{connection.Open();// 创建OleDbDataAdapter实例OleDbDataAdapter adapter = new OleDbDataAdapter(query, connection);// 使用OleDbDataAdapter填充DataSetadapter.Fill(dataSet, "Sheet1");// 获取DataTableDataTable table = dataSet.Tables["Sheet1"];// 处理数据foreach (DataRow row in table.Rows){Console.WriteLine($"Column1: {row[0]}, Column2: {row[1]}");}}catch (Exception ex){// 处理异常Console.WriteLine("An error occurred: " + ex.Message);}}}
}
using System;
using System.Data.OleDb;class Program
{static void Main(){string connectionString = "Provider=SQLOLEDB;Data Source=YourServer;Initial Catalog=YourDatabase;User ID=YourUsername;Password=YourPassword;";string query = "SELECT Id, Name FROM People";using (OleDbConnection connection = new OleDbConnection(connectionString)){OleDbCommand command = new OleDbCommand(query, connection);connection.Open();OleDbDataReader reader = command.ExecuteReader();while (reader.Read()){int id = reader.GetInt32(0);string name = reader.GetString(1);Console.WriteLine($"Id: {id}, Name: {name}");}reader.Close();}}
}