当前位置: 首页 > 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;如性能分析、日志记录…...

gpu算力与图形处理

核心本质 图形处理&#xff08;Graphics&#xff09;&#xff1a;GPU 天生本职工作 —— 画画面、渲染 3D、光栅化、纹理、着色、显示输出。GPU 算力&#xff08;Compute / GPGPU&#xff09;&#xff1a;利用 GPU 超多小核心 做通用并行计算 —— AI、科学计算、挖矿、渲染、仿…...

MATLAB绘图中文乱码终极解决方案:3种方法让你的图表告别方框

MATLAB绘图中文乱码终极解决方案&#xff1a;3种方法让你的图表告别方框 科研图表中的中文显示问题一直是MATLAB用户的痛点。当精心准备的论文图表出现"口口口"方框时&#xff0c;不仅影响数据呈现效果&#xff0c;更可能让研究成果的专业性大打折扣。本文将深入剖析…...

Windows Server 2012系统FileZilla搭建FTP服务器

一、FTP介绍 1.FTP服务器简介 FTP 服务器是基于文件传输协议&#xff08;File Transfer Protocol&#xff09;搭建的文件共享服务&#xff0c;主要用于在网络中实现客户端与服务器之间的文件上传、下载及管理。它支持多用户访问、权限控制、目录隔离等功能&#xff0c;广泛应用…...

【Linux基础】文件编辑压缩解压

文件编辑&&压缩解压 实验环境准备 [rootCentOS-Harvy /]# cd tmp/ [rootCentOS-Harvy tmp]# mkdir -p lab_319[rootCentOS-Harvy tmp]# ll | grep *319 drwxr-xr-x. 2 root root 6 3月 19 16:59 lab_319实验1&#xff1a;Vim 文本编辑 1.1 创建文件并写入内容…...

弃投《Nature Communications》转投它?这些期刊正在让这批科研人弯道超车!

《Science Advances》影响因子分区自引率12.5JCR Q1 / 综合1区 1.6%研究方向&#xff1a;多学科综合、自然科学与工程期刊亮点&#xff1a;AAAS顶刊&#xff0c;年发文约2000篇&#xff0c;国人占比约30%&#xff0c;审稿3-5个月&#xff0c;OA发表&#xff0c;是各学科冲一区顶…...

迎战2026知网最严查重:零成本脱“AI味”!10款免费工具硬核排雷红黑榜

四月一到&#xff0c;查重和AIGC检测成了两座大山。 自己熬夜敲的字被判AI生成&#xff0c;或者润色后满篇通红&#xff0c;这绝望感谁懂&#xff1f; 为了搞定论文降aigc这个大坑&#xff0c;我拿手头几篇废稿&#xff0c;去市面上热门的10款降ai率工具滚了一圈。今天这篇吐…...

青蓝送水小程序开发(现成案例)

以下为现成的送水类小程序开发案例及关键功能模块&#xff0c;可结合业务需求调整&#xff1a;核心功能模块用户端&#xff1a;水品分类展示、在线下单、配送地址管理、订单跟踪、在线支付、会员积分系统配送端&#xff1a;订单接收、配送路线规划、状态更新、异常反馈管理后台…...

Qwen3.5-2B轻量化应用:车载中控屏部署,语音提问+拍照识物双模式

Qwen3.5-2B轻量化应用&#xff1a;车载中控屏部署&#xff0c;语音提问拍照识物双模式 1. 车载AI助手新选择 在智能汽车快速发展的今天&#xff0c;车载中控系统正从简单的信息显示向智能交互平台转变。Qwen3.5-2B作为一款轻量化多模态基础模型&#xff0c;凭借其20亿参数的紧…...

鸿蒙物联网开发教程-第八章 网络请求1

第八章 网络请求 8.1 网络请求概述 鸿蒙应用中的网络请求主要使用fetch API或@ohos.net.http模块进行网络通信。网络请求用于: 获取远程数据 上传数据到服务器 与物联网平台通信 调用第三方API 8.2 HTTP请求 8.2.1 使用fetch API // 发送GET请求fetch(‘https://api.e…...

3步终极指南:如何快速解决openpilot驾驶辅助系统的5大常见问题

3步终极指南&#xff1a;如何快速解决openpilot驾驶辅助系统的5大常见问题 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub…...