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#设计模式之Strategy策略模式解决007大破密码危机问题示例

    C#设计模式之Strategy策略模式解决007大破密码危机问题示例

    这篇文章主要介绍了C#设计模式之Strategy策略模式解决007大破密码危机问题,简单描述了策略模式的定义并结合加密解密算法实例分析了C#策略模式的具体使用方法,需要的朋友可以参考下
    2017-09-09
  • c#给图片添加文字的代码小结

    c#给图片添加文字的代码小结

    c#编程中,我们需要为图片添加文字水印,那么就可以参考下面的几个代码
    2012-11-11
  • C#实现从PPT中提取文本的示例代码

    C#实现从PPT中提取文本的示例代码

    今天这篇文章主要为大家详细介绍了如何通过编程方式提取PowerPoint中的文字,文章最后附有C#/VB.NET代码以及效果图,希望对你有所帮助
    2023-05-05
  • c#线程Thread示例

    c#线程Thread示例

    这篇文章主要介绍了c#线程Thread示例,需要的朋友可以参考下
    2014-05-05
  • C#自定义控件VS用户控件

    C#自定义控件VS用户控件

    这篇文章主要为大家详细介绍了C#中自定义控件VS用户控件的区别,介绍了开发自己的控件的几种方法、自定义控件与用户控件区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Unity Shader实现3D翻页效果

    Unity Shader实现3D翻页效果

    这篇文章主要为大家详细介绍了Unity Shader实现3D翻页效果,Plane实现翻页效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • C#递归算法之归并排序

    C#递归算法之归并排序

    这篇文章主要介绍了C#递归算法中的归并排序,需要的朋友可以参考下。
    2016-06-06
  • .Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用

    .Net WInform开发笔记(二)Winform程序运行结构图及TCP协议在Winform中的应用

    中午没事,把去年刚毕业那会画的几张图翻出来了,大概介绍Winform应用程序运行的过程,以及TCP协议在Winform中的应用。感兴趣的朋友可以了解下;如果有Windows消息机制等基础,很好理解这两张
    2013-01-01
  • C# 实现FTP上传资料的示例

    C# 实现FTP上传资料的示例

    这篇文章主要介绍了C# 实现FTP上传资料的示例,帮助大家更好的理解和学习c#,感兴趣的朋友可以了解下
    2020-12-12
  • C#数据结构与算法揭秘三 链表

    C#数据结构与算法揭秘三 链表

    这节我们讨论链表的基本操作,并且画图以证明,下届中我们将讨论双向链表,环形链表 应用举例
    2012-11-11

最新评论