C#语言的数据库编程

news2025/1/10 12:51:17

C#语言的数据库编程

在现代软件开发中,数据库是不可或缺的一部分。无论是企业级应用还是个人项目,数据的存储与管理都是程序的核心功能之一。C#作为一种强类型、面向对象的编程语言,广泛应用于Windows平台的开发,尤其是在构建与数据库交互的应用时,其强大的功能和丰富的库支持使得开发变得相对容易。本文将深入探讨C#语言的数据库编程,覆盖基础知识、ADO.NET、Entity Framework等核心概念以及一些实用示例。

一、C#与数据库编程的基础

在开始数据库编程之前,首先要了解一些基础概念:

1. 数据库的基本组成

数据库通常由以下几个部分组成:

  • :数据库中存储数据的核心单位,表由行和列组成。
  • :表中的一条记录,表示一个具体的数据项。
  • :表中的一个字段,定义了数据项的属性。
  • 主键:唯一标识表中每一行的字段,确保数据的唯一性。
  • 外键:用于在不同表之间建立联系的字段。

2. 数据库管理系统(DBMS)

常见的数据库管理系统包括:

  • 关系型数据库:如SQL Server、MySQL、PostgreSQL、Oracle等。
  • 非关系型数据库:如MongoDB、Redis等。

本文主要集中于关系型数据库的编程,从而使用C#与SQL Server进行交互。

二、ADO.NET入门

ADO.NET是用于与数据源进行交互的核心组件,提供了全面的功能,用于数据访问、更新和管理。

1. ADO.NET的组成

ADO.NET的核心组件包括:

  • Connection:表示与数据库的连接。
  • Command:用于执行数据库命令(如查询和更新)。
  • DataReader:用于从数据库中读取数据的高效方式。
  • DataSet:用于在内存中保存数据的容器,可以看作是多个DataTable的集合。

2. 连接数据库

在使用C#进行数据库编程时,第一步通常是创建与数据库的连接。下面是一个简单的示例,展示如何使用SqlConnection连接到SQL Server数据库。

```csharp using System; using System.Data.SqlClient;

class Program { static void Main() { // 连接字符串 string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        try
        {
            // 打开连接
            connection.Open();
            Console.WriteLine("数据库连接成功!");
        }
        catch (Exception ex)
        {
            Console.WriteLine("数据库连接失败: " + ex.Message);
        }
    }
}

} ```

3. 执行命令

连接成功后,我们可以使用SqlCommand执行SQL命令。以下示例演示了如何查询数据:

```csharp using System; using System.Data.SqlClient;

class Program { static void Main() { string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();
        string sqlQuery = "SELECT * FROM Users";

        using (SqlCommand command = new SqlCommand(sqlQuery, connection))
        {
            SqlDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                Console.WriteLine($"用户ID: {reader["UserId"]}, 用户名: {reader["UserName"]}");
            }
        }
    }
}

} ```

三、数据操作

1. 插入数据

要向数据库插入数据,我们可以使用INSERT语句。以下是插入用户数据的示例代码:

```csharp using System; using System.Data.SqlClient;

class Program { static void Main() { string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        string insertQuery = "INSERT INTO Users (UserName) VALUES (@UserName)";

        using (SqlCommand command = new SqlCommand(insertQuery, connection))
        {
            command.Parameters.AddWithValue("@UserName", "新用户");
            int rowsAffected = command.ExecuteNonQuery();

            Console.WriteLine($"{rowsAffected} 行被插入。");
        }
    }
}

} ```

2. 更新数据

更新数据的方式与插入相似,只需使用UPDATE语句:

```csharp using System; using System.Data.SqlClient;

class Program { static void Main() { string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        string updateQuery = "UPDATE Users SET UserName = @NewName WHERE UserId = @UserId";

        using (SqlCommand command = new SqlCommand(updateQuery, connection))
        {
            command.Parameters.AddWithValue("@NewName", "更新后的用户");
            command.Parameters.AddWithValue("@UserId", 1); // 假设要更新的用户ID为1

            int rowsAffected = command.ExecuteNonQuery();

            Console.WriteLine($"{rowsAffected} 行被更新。");
        }
    }
}

} ```

3. 删除数据

删除数据使用DELETE语句,例如:

```csharp using System; using System.Data.SqlClient;

class Program { static void Main() { string connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";

    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        connection.Open();

        string deleteQuery = "DELETE FROM Users WHERE UserId = @UserId";

        using (SqlCommand command = new SqlCommand(deleteQuery, connection))
        {
            command.Parameters.AddWithValue("@UserId", 1); // 假设要删除的用户ID为1

            int rowsAffected = command.ExecuteNonQuery();

            Console.WriteLine($"{rowsAffected} 行被删除。");
        }
    }
}

} ```

四、使用Entity Framework

ADO.NET虽然功能强大,但在处理复杂的数据操作时,手动的代码可能会变得繁琐。Entity Framework(EF)作为一个对象关系映射(ORM)框架,提供了更高层次的抽象,使得数据库操作更加简洁和直观。

1. 安装Entity Framework

通过NuGet包管理器安装Entity Framework:

bash Install-Package EntityFramework

2. 创建数据模型

定义一个代表数据表的模型类。例如,一个用户类可以如下定义:

csharp public class User { public int UserId { get; set; } public string UserName { get; set; } }

3. 创建数据库上下文

创建一个数据库上下文类,用于与数据库交互:

```csharp using System.Data.Entity;

public class MyDbContext : DbContext { public DbSet Users { get; set; } } ```

4. CRUD操作示例

使用Entity Framework进行CRUD操作十分简单。以下是一个简单的示例:

```csharp using System; using System.Linq;

class Program { static void Main() { using (var context = new MyDbContext()) { // 插入数据 var newUser = new User { UserName = "新用户" }; context.Users.Add(newUser); context.SaveChanges(); Console.WriteLine("用户已插入。");

        // 查询数据
        var user = context.Users.FirstOrDefault(u => u.UserId == newUser.UserId);
        Console.WriteLine($"查询到用户: {user.UserName}");

        // 更新数据
        user.UserName = "更新后的用户";
        context.SaveChanges();
        Console.WriteLine("用户已更新。");

        // 删除数据
        context.Users.Remove(user);
        context.SaveChanges();
        Console.WriteLine("用户已删除。");
    }
}

} ```

五、总结

本文探讨了C#语言在数据库编程中的应用,介绍了ADO.NET的基本概念和使用方法,以及如何利用Entity Framework简化数据库操作。通过示例代码,演示了常见的数据库操作:连接、查询、插入、更新和删除。在实际开发中,还可以根据业务需求进行扩展和优化,更好地利用数据库的性能。

未来的数据库编程中,随着大数据和云计算的发展,可能会有更多的技术和工具涌现,而C#作为一门灵活的语言,将持续发挥其作用。无论是传统关系数据库还是新兴的非关系数据库,了解其基本原理与操作方法,将拓宽开发者的技术视野。

希望本文能够帮助读者更好地理解和掌握C#的数据库编程技能,为实际项目的开发打下坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Linux系列】如何使用 nohup 命令在后台运行脚本

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

门禁系统与消防报警的几种联动方式

1、规范中要求的出入口系统与消防联动 1.1《建筑设计防火规范》GB 50016-2018 1.2《民用建筑电气设计规范》JGJ 16-2008  14.4出入口控制系统 3 设置在平安疏散口的出入口限制装置,应与火灾自动报警系统联动;在紧急状况下应自动释放出入口限制系统&…

Express 加 sqlite3 写一个简单博客

例图: 搭建 命令: 前提已装好node.js 开始创建项目结构 npm init -y package.json:{"name": "ex01","version": "1.0.0","main": "index.js","scripts": {"test": &q…

GetMaterialApp组件的功能与用法

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性3. 示例代码4. 内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经介绍过GetMaterialApp组…

LabVIEW之树形控件

一、树形控件基本构成 树形控件这个名称非常形象,其如同树一样,是典型的分层结构。树形控件的属性和方法使用非常灵活,树形控件的内容既可以静态编辑,也可以通过编程来动态填充。静态编辑树形控件适用于内容不变的应用场景&#…

Inno Setup制作安装包,安装给win加环境变量

加 ; 加环境变量,开启,下面一行 ChangesEnvironmentyes 和 ; 加环境变量wbrj变量名,{app}\project\bin变量值,{app}\后接文件名,{app}表示安装路径。下面一行,{olddata};原来的值上拼接 Root: HKLM; Subkey: “SYSTEM\…

张朝阳惊现CES展,为中国品牌 “代言”的同时,或将布局搜狐新战略!

每年年初,科技圈的目光都会聚焦在美国拉斯维加斯,因为这里将上演一场被誉为 “科技春晚” 的年度大戏 ——CES 国际消费电子展。作为全球规模最大、最具影响力的科技展会之一,CES 吸引了来自 160 多个国家的创新者和行业领导者,是…

UDS诊断之0x27服务—结合实例讲解

前言: 本文讲解的是比较深入一点知识,对于一些刚入门的同学,建议直接先看一遍14229规范,然后找一个实际项目练练手!然后再来看本文,相信你会对0x27服务有更深的认知!!! …

React Router 向路由组件传state参数浏览器回退历史页面显示效果问题

昨天在看尚硅谷张天禹老师讲的 React教程p90,老师讲到 React路由的 replace模式和push模式,老师的演示效果与自己本地操作不太一样。 老师的效果:点击查看消息1,消息2,消息3 再点回退,可以依次查看到 消息…

静态路由配置与调试——计算机网络实训day1

文章目录 操作前准备一、实验目的二、实验要求三、实验过程1、在R1和R2上配置设备名称。基本配置设备命名 2、在R1和R2上配置接口IP地址,并查看IP地址的配置情况。3、在R1和R2上配置静态路由,并查看路由表。静态路由缺省路由(默认路由&#x…

【HeadFirst系列之HeadFirst设计模式】第1天之HeadFirst设计模式开胃菜

HeadFirst设计模式开胃菜 前言 从今日起,陆续分享《HeadFirst设计模式》的读书笔记,希望能够帮助大家更好的理解设计模式,提高自己的编程能力。 今天要分享的是【HeadFirst设计模式开胃菜】,主要介绍了设计模式的基本概念、设计模…

UOS系统和windows系统wps文档显示差异问题解决

最近在使用UOS系统的过程中,发现了一个很有意思的现象。就是在UOS系统上编辑的文档,发到windows系统上,会出现两个文档显示差异很大的情况,文档都是使用一样的wps软件打开的。到底是什么原因导致这种现象的呢?该如何解…

网络应用层HTTP协议

网络应用层HTTP协议 1. HTTP协议介绍 在互联网世界中,HTTP(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。…

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构,它在数据…

在 macOS 中,设置自动将文件夹排在最前

文章目录 1、第一步访达设置2、第二步排序方式 需要两步设置 1、第一步访达设置 按名称排序的窗口中 2、第二步排序方式 选择名称

【数据库】Unity 使用 Sqlite 数据库

1.找到需要三个 DLL Mono.Data.Sqlite.dllSystem.Data.dllsqlite3.dll 上面两个dll可在本地unity安装目录找到: C:\Program Files\Unity\Hub\Editor\2022.3.xxf1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 下面dll可在sqlite官网下载到&#xff…

国内使用博查SearchAPI进行智能搜索,通过API获取搜索引擎的天气、日历、百科、手机、火车票等信息

在现代开发中,网络资源搜索是关键且常见的需求。博查SearchAPI作为国内领先的智能搜索解决方案,已服务超过2000家企业和16000名开发者,获得腾讯元器、字节扣子、阿里钉钉等官方推荐。该API提供近百亿网页内容及多样的生态合作内容&#xff0c…

免费网站源码下载指南:如何安全获取并降低开发成本

许多开发者或是需要建立网站的人,可以方便地获取免费网站源码。这样的下载能帮助他们降低开发费用,迅速构建起基本框架。但在此过程中,仍有许多需要注意的事项。 许多开发者或是需要建立网站的人,可以方便地获取免费网站源码。这…

colnames看似简单,却能优化数据处理流程

引言 在数据处理和分析中,变量名称是至关重要的,它们决定了数据的可读性和操作的简便性。在R语言中,colnames 函数以其简单的语法设计,提供了高效管理数据框列名的能力,尤其是在复杂的爬虫任务中显得尤为重要。本篇文…

计算机网络例题

IP地址分类: A类:网络号范围: 1~126 (0000 0001 ~ 0111 1110) B类:网络号范围:128.1 ~ 191.255 (可用范围) C类:网络号段范围:192.0.1 ~ 223.2…