C#通过ADO.NET访问数据的方法详解

 更新时间:2025年02月07日 10:34:36   作者:恩1003  
在 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 数据库的示例代码:

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读取数据。

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方法,该方法返回受影响的行数。

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 语句。

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方法实现。

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提供了离线数据访问的能力,以下是一个示例:

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结构来处理异常。

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访问数据有了全面的了解。在实际开发中,你可以根据具体需求灵活运用这些知识,构建出高效、稳定的数据访问功能。

到此这篇关于C#通过ADO.NET访问数据的方法详解的文章就介绍到这了,更多相关C# ADO.NET访问数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#通过热键控制显示器开关的方法

    C#通过热键控制显示器开关的方法

    这篇文章主要介绍了C#通过热键控制显示器开关的方法,涉及C#针对热键的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2014-12-12
  • 如何利用C#正则表达式判断是否是有效的文件及文件夹路径

    如何利用C#正则表达式判断是否是有效的文件及文件夹路径

    项目中少不了读取或设置文件路径的功能,如何才能对输入的路径是否合法进行判断呢?下面这篇文章主要给大家介绍了关于C#利用正则表达式判断是否是有效的文件及文件夹路径的相关资料,需要的朋友可以参考下
    2022-04-04
  • c# BackgroundWorker使用方法

    c# BackgroundWorker使用方法

    这篇文章主要介绍了c# BackgroundWorker使用方法,文中代码非常详细,帮助大家更好的参考学习,感兴趣的朋友可以了解下
    2020-06-06
  • C#中线程安全问题的调试和解决

    C#中线程安全问题的调试和解决

    在C#中,多线程编程是一种常见且强大的工具,但它带来了线程安全的问题,本文将介绍如何调试和解决C#中的线程安全问题,并深入探讨锁机制、并发控制以及调试的最佳实践,需要的朋友可以参考下
    2025-03-03
  • C#实现快速排序算法

    C#实现快速排序算法

    本文详细讲解了C#实现快速排序算法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Unity实现场景加载功能

    Unity实现场景加载功能

    这篇文章主要为大家详细介绍了Unity实现场景加载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 聊聊Unity 自定义日志保存的问题

    聊聊Unity 自定义日志保存的问题

    这篇文章主要介绍了Unity 自定义日志保存的问题,之前unity5.x在代码中写了debug.log打包之后在当前程序文件夹下会有个对应的"outlog.txt",后来进行了更改,今天通过代码给大家介绍了Unity日志保存的问题,需要的朋友一起看看吧
    2021-05-05
  • c#数学表示法(后缀表示法)详解

    c#数学表示法(后缀表示法)详解

    什么是后缀表达式,查了下原来是一种比较特殊的数学表达式,有三种表达式:前缀表达式、中缀表达式和后缀表达式,下面我们使用示例学习一下
    2014-01-01
  • WPF实现Table布局控件的示例代码

    WPF实现Table布局控件的示例代码

    这篇文章主要为大家详细介绍了如何使用WPF实现Table布局控件,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • winform树形菜单无限级分类实例

    winform树形菜单无限级分类实例

    本文介绍了“winform树形菜单无限级分类实例”,需要的朋友可以参考一下
    2013-03-03

最新评论