当前位置: 首页 > news >正文

C#语言的数据库编程

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为1int 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为1int 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#的数据库编程技能,为实际项目的开发打下坚实的基础。

相关文章:

C#语言的数据库编程

C#语言的数据库编程 在现代软件开发中,数据库是不可或缺的一部分。无论是企业级应用还是个人项目,数据的存储与管理都是程序的核心功能之一。C#作为一种强类型、面向对象的编程语言,广泛应用于Windows平台的开发,尤其是在构建与数…...

时频分析之S变换

S变换的提出 1996年,由R.G Stockwell 提出了S变换,和其他时频分析工具一样,通过S变换,我们可以同时从时域以及频域观察一个信号的能量分布。S变换融合了短时傅里叶变换和小波变换的优点。关于S变换,最早发表于TSP上的…...

第二十八周学习周报

目录 摘要Abstract1 GFPGAN1.1 总体结构1.2 实验研究1.3 代码分析 总结 摘要 本周主要的学习内容是GFPGAN模型。GFPGAN是一种基于生成对抗网络(GAN)的模型,其利用封装在预训练的人脸GAN中的丰富多样的先验进行人脸图像的修复。这种生成面部先验(GFP&…...

SurfaceFlinger MessageQueue原理

SurfaceFlinger MessageQueue 有2个作用: 处理SurfaceFlinger INVALIDATE、REFRESH事件管理SurfaceFlinger主线程挂起和恢复 SurfaceFlinger::run() { while (true) { mEventQueue->waitMessage(); } } waitMessage {do {IPCThreadState::self()->flushComm…...

component-动态控制 div width 的值 根据传入的变量决定width的值 vue

1.实现 根据参数的值&#xff0c;div显示不同的长度 <div class"node-line" :style"lineProgress"></div> <script>export default {name: "trainSummaryInfo",data(){return{linePercentage:200,}},computed:{lineProgress…...

C#中的常用集合

目录 一、动态数组ArrayList 二、List 三、栈&#xff08;Stack&#xff09; 四、队列&#xff08;Queue&#xff09; 五、字典&#xff08;Dictionary&#xff09;,int> 一、动态数组ArrayList ArrayList 是 C# 中提供的一种动态数组类&#xff0c;位于命名空间 Syste…...

插入实体自增主键太长,mybatis-plaus自增主键

1、问题 spring-boot整合mybtais执行insert语句时&#xff0c;主键id为长文本数据。 2、分析问题 1)数据库主键是否自增 2&#xff09;数据库主键的种子值设置的多少 3、解决问题 1&#xff09;数据库主键设置的时自增 3&#xff09;种子值是1 所以排查是数据库的问题 4、继…...

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…...

【MySQL】MVCC详解, 图文并茂简单易懂

欢迎来到啊妮莫的学习小屋 祝读本文的朋友都天天开心呀 目录 MVCC简介快照读与当前读快照读当前读 隔离级别隐藏字段和Undo Log版本链✨MVCC原理--ReadView✨ReadView简介设计思路适用隔离级别重要内容 ReadView规则MVCC整体流程 不同隔离级别下的MVCC读已提交可重复读 总结 M…...

中国数字化发展的问题与机会

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、埃域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能,如智能化推荐、…...

【ROS2】☆ launch之Python

☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch&#xff0c;而ROS2保留了XML 格式launch&#xff0c;还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好&#xff0c;但是ROS2官方推荐使用Python方式编写…...

如何稳定使用 O1 / O1 Pro,让“降智”现象不再困扰?

近期&#xff0c;不少朋友在使用 O1 或 O1 Pro 模型时&#xff0c;都会碰到“降智”或“忽高忽低”的智力波动&#xff0c;比如无法识图、无法生成图片、甚至回答准确度也不稳定。面对这些问题&#xff0c;你是不是也感到头疼呢&#xff1f; 为了找到更可靠的解决办法&#xf…...

zookeeper监听机制(Watcher机制)

文章目录 引言I zookeeper监听机制Watcher机制实现分布式的通知功能触发事件种类Watcher的三个过程II watch机制特点一次性触发事件封装event异步发送先注册再触发常见的通知状态和事件类型III 应用案例(Kafka)Kafka的消息模型Kafka在Zookeeper中保存的元数据Kafka 基于Contr…...

docker 启动 nacos 单机模式

docker 启动 nacos 单机模式 # 拉取镜像# 启动&#xff0c;如果不拉镜像会自动拉取最新的 image docker run --name standalong_nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 -e MODEstandalone -d nacos/nacos-server# 状态查看外部访问验证 输入部署的 docker ip 地址以及…...

学习threejs,导入babylon格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.BabylonLoader babyl…...

03.MPLS静态LSP配置实验

MPLS静态LSP配置实验 1、实验环境2、基础配置开启全局mpls接口下开启mpls配置静态LSP配置FEC从1.1.1.1到3.3.3.3配置FEC从3.3.3.3到1.1.1.13、信息查看查看LFIB表(标签转发信息表)查看FIB表(转发信息表)查看详细FFIB表tracert lsp iptracert -vping lsp ip4、抓包验证1、实…...

程序血缘分析技术在工商银行软件工程中的应用

当前,随着软件领域技术更新换代速度的日益加快,市场需求也变得更加多样化和个性化,业界普遍通过加速产品迭代来满足客户需求,但在此过程中也暴露出一些研发管理痛点问题,如服务和程序类资产信息分散于各个不同的应用和系统中,信息归集费时费力;设计、开发和测试人员无法…...

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask 大

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

macOS 使用 FreeRDP 远程访问 Windows:完整指南20250109

&#x1f5a5;️ macOS 使用 FreeRDP 远程访问 Windows&#xff1a;完整指南 引言 随着远程办公需求的快速增长&#xff0c;跨平台远程管理已经成为不可或缺的技能之一。作为一款开源轻量的远程桌面协议实现工具&#xff0c;FreeRDP 为 macOS 用户提供了一个简单、高效的解决…...

Java agent

‌ Java Agent是一种特殊的Java程序&#xff0c;它可以在JVM启动时或运行时动态加载&#xff0c;用于监控和修改其他Java应用程序的行为‌。通过Java Agent&#xff0c;开发者可以在不修改目标应用程序源码的情况下&#xff0c;动态地插入功能&#xff0c;如性能分析、日志记录…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开&#xff0c;首…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...