C# 使用ADO.NET访问数据全解析


.NET学习资料

.NET学习资料

.NET学习资料


在 C# 的应用开发中,数据访问是极为关键的部分。ADO.NET作为.NET 框架下用于数据访问的核心技术,能够帮助开发者便捷地与各类数据源进行交互。本文将深入剖析ADO.NET,带你掌握使用 C# 通过ADO.NET访问数据的方法。

一、ADO.NET简介

ADO.NET(ActiveX Data Objects for.NET)是一组类库,专门用于在.NET 环境中进行数据访问。它支持多种数据源,例如 SQL Server、Oracle、MySQL 等,为开发者提供了统一的数据访问接口,极大地简化了数据访问的流程。

(一)核心组件

Connection:负责建立与数据源的连接,如SqlConnection用于连接 SQL Server 数据库。不同的数据源对应不同的Connection实现类。

Command:可执行 SQL 命令或存储过程,像SqlCommand就用于执行针对 SQL Server 数据库的命令。通过它,开发者能够实现数据的查询、插入、更新和删除等操作。

DataReader:以只读、只进的方式高效读取数据源中的数据,例如SqlDataReader从 SQL Server 数据库读取数据。它适用于需要快速读取大量数据且不需要对数据进行复杂操作的场景。

DataAdapter:在数据源和DataSet之间充当桥梁,用于数据的填充和更新。比如SqlDataAdapter可以从 SQL Server 数据库中获取数据并填充到DataSet中,也能将DataSet中的数据更新回数据库。

DataSet:它是一个内存中的数据缓存,类似于一个小型的数据库,可存储多个DataTable以及它们之间的关系。DataSet允许开发者在断开与数据源连接的情况下对数据进行操作,提高了应用程序的灵活性和性能。

二、使用ADO.NET访问数据的步骤

(一)连接数据库

首先要建立与数据库的连接,以下是连接 SQL Server 数据库的示例代码:

csharp 复制代码
string connectionString = "server=your_server;database=your_database;user id=your_user;password=your_password;";
using (SqlConnection connection = new SqlConnection(connectionString))
{
    try
    {
        connection.Open();
        Console.WriteLine("数据库连接成功!");
        // 在这里进行后续的数据操作
    }
    catch (SqlException ex)
    {
        Console.WriteLine("数据库连接错误: " + ex.Message);
    }
}

在上述代码中,connectionString包含了连接数据库所需的服务器地址、数据库名称、用户名和密码等信息。使用using语句可以确保SqlConnection对象在使用完毕后正确释放资源。

(二)执行 SQL 命令

查询数据:使用SqlCommand类执行 SQL 查询语句,并通过SqlDataReader读取数据。

csharp 复制代码
string query = "select * from Employees";
using (SqlCommand command = new SqlCommand(query, connection))
{
    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine(reader["EmployeeName"].ToString());
    }
    reader.Close();
}

这段代码中,query是 SQL 查询语句,SqlCommand对象根据该语句和已建立的连接来执行查询。ExecuteReader方法返回一个SqlDataReader对象,通过while循环可以逐行读取查询结果。

插入数据:插入数据同样使用SqlCommand对象,但需要使用ExecuteNonQuery方法,该方法返回受影响的行数。

csharp 复制代码
string insertQuery = "insert into Employees (EmployeeName, Department) values ('John Doe', 'HR')";
using (SqlCommand insertCommand = new SqlCommand(insertQuery, connection))
{
    int rowsAffected = insertCommand.ExecuteNonQuery();
    Console.WriteLine(rowsAffected + " 行数据已插入。");
}

更新数据:更新数据的操作与插入数据类似,只需修改 SQL 语句。

csharp 复制代码
string updateQuery = "update Employees set Department = 'IT' where EmployeeName = 'John Doe'";
using (SqlCommand updateCommand = new SqlCommand(updateQuery, connection))
{
    int rowsAffected = updateCommand.ExecuteNonQuery();
    Console.WriteLine(rowsAffected + " 行数据已更新。");
}

删除数据:删除数据也是通过SqlCommand和ExecuteNonQuery方法实现。

csharp 复制代码
string deleteQuery = "delete from Employees where EmployeeName = 'John Doe'";
using (SqlCommand deleteCommand = new SqlCommand(deleteQuery, connection))
{
    int rowsAffected = deleteCommand.ExecuteNonQuery();
    Console.WriteLine(rowsAffected + " 行数据已删除。");
}

(三)使用 DataAdapter 和 DataSet

DataAdapter和DataSet提供了离线数据访问的能力,以下是一个示例:

csharp 复制代码
string selectQuery = "select * from Employees";
using (SqlDataAdapter adapter = new SqlDataAdapter(selectQuery, connection))
{
    DataSet dataset = new DataSet();
    adapter.Fill(dataset, "Employees");
    DataTable table = dataset.Tables["Employees"];
    foreach (DataRow row in table.Rows)
    {
        Console.WriteLine(row["EmployeeName"].ToString());
    }

}

在这个示例中,SqlDataAdapter根据查询语句从数据库中获取数据,并填充到DataSet中。DataSet中的数据可以在离线状态下进行操作,操作完成后再通过DataAdapter将更改更新回数据库。

三、异常处理

在进行数据库操作时,异常处理至关重要,以确保应用程序的稳定性。通常使用try-catch-finally结构来处理异常。

csharp 复制代码
try
{
    // 数据库操作代码
    string connectionString = "server=your_server;database=your_database;user id=your_user;password=your_password;";
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        string query = "select * from Employees";
        using (SqlCommand command = new SqlCommand(query, connection))
        {
            SqlDataReader reader = command.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(reader["EmployeeName"].ToString());
            }
            reader.Close();
        }
    }
}
catch (SqlException ex)
{
    Console.WriteLine("数据库错误: " + ex.Message);
}
finally
{
    // 这里可以添加释放资源的代码,如关闭连接等
}

在try块中放置数据库操作代码,catch块捕获并处理可能出现的SqlException异常,finally块用于执行无论是否发生异常都需要执行的代码,例如关闭数据库连接。

通过以上内容,你已经对 C# 使用ADO.NET访问数据有了全面的了解。在实际开发中,你可以根据具体需求灵活运用这些知识,构建出高效、稳定的数据访问功能。

相关推荐
Goober Airy5 分钟前
JS:将JS对象格式化为php语法形式(完美支持无unicode编码匹配的正则)
开发语言·前端·javascript
哟哟耶耶18 分钟前
css-根据不同后端返回值返回渲染不同的div样式以及公共组件设定
开发语言·前端·css
来恩100320 分钟前
C# 异常处理全解析
java·数据库·c#
pchmi26 分钟前
C# OpenCV机器视觉:图像风格迁移
人工智能·opencv·计算机视觉·c#·机器视觉
还是鼠鼠37 分钟前
详细介绍:使用 Axios 上传图片文件
开发语言·前端·javascript·vscode·ajax·前端框架·bootstrap
Victoria.a2 小时前
c++继承
开发语言·c++
OCR_API2 小时前
实名制-网络平台集成身份证实名认证接口/身份证查询-PHP
android·开发语言·php
李游Leo3 小时前
mac 安装 dotnet 环境
安全·macos·.net
egoist20233 小时前
链式结构二叉树(递归暴力美学)
c语言·开发语言·数据结构·学习·链表·二叉树·前中后序遍历