C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14
目录
一.安装SQLServer
二.在SQLServer中创建一个数据库
1.打开SQL Server Manager Studio(SSMS)连接服务器
2.创建新的数据库
3.创建表
三.Visual Studio 配置
1.创建一个简单的VS项目(本文创建为一个简单的控制台项目)
2.添加数据库连接
四.简单连通代码示例
简单连通代码示例:
五.在VS中对SQLServer中的Students表进行简单的增删改查
引言:
SQL Server是微软开发的关系数据库管理系统,与市面上其他数据库系统相比
SQL Server在企业级功能,性能优化,安全性和集成性方面表现优异,适合大中型企业应用
SQLServer的主要功能:
- 数据存储和管理:支持各种数据类型,包括结构化数据,非结构化数据和半结构化数据
- 安全性:提供了多层次的安全机制,如数据库加密,用户权限管理和审计功能
- 高可用性和灾难恢复:支持数据库镜像,日志传送,故障转移群集和Always On可用性组
- 性能优化:内置性能监控和优化工具,如索引调优,查询优化器和数据库引擎自动调优
- 集成服务:包括SQL Server Integration Services (SSIS),SQL Server Reporting Services (SSRS) 和SQL Server Analysis Services (SSAS),用于数据集成,报表生成和数据分析
一.安装SQLServer
当我们需要在Visual Studio中连接一个SQLServer数据库或者其他数据库时,我们需要先去其官网下载对应的数据库
Visual Studio(VS)是一个集成开发环境(IDE),支持多种编程语言和开发工具
借助Visual Studio,开发者可以方便的管理和操作SQLServer数据库
二.在SQLServer中创建一个数据库
1.打开SQL Server Manager Studio(SSMS)连接服务器
可以将服务器名称替换为.(代表本机)
使用Windows身份验证
然后点击连接

2.创建新的数据库
在左侧对象资源管理器中右击"数据库"
选择"新建数据库"

输入数据库名称,点击确定

这里使用StudentDB作为数据库库名
3.创建表
展开数据库
选中当前数据库
选择"新建查询"(快捷键Ctrl+N)
添加以下列:
CREATE TABLE Students
(Id INT IDENTITY(1,1) PRIMARY KEY,Name NVARCHAR(50),Age INT,Grade NVARCHAR(10)
)
执行SQL语句
然后右键"表",单击刷新,即可在"表"文件夹下找到新建表Students

右键Students表,单击设计,即可查看当前创建的表结构

三.Visual Studio 配置
1.创建一个简单的VS项目(本文创建为一个简单的控制台项目)
2.添加数据库连接
在"服务器资源管理器"中(视图->服务器资源管理器),快捷键Ctrl+Alt+S
右键"数据连接",点击添加连接

数据源选择SQLServer

服务器名自动检索
勾选"信任服务器证书"
数据库名选择新建的StudentDB
单击左下角"测试连接"
最后点击"确定"

打开解决方案资源管理器(快捷键为Ctrl+Alt+L)
右键"依赖项"
打开"管理NuGet程序包"

在"浏览"块 搜索SqlClient
单击Microsoft.Data.SqlClient 进行NuGet包的安装

安装时跳出接受许可证界面选择"我接受"
四.简单连通代码示例
在上面的配置完成之后就可以在VS中使用SQLServer了
简单连通代码示例:
// 1. 连接字符串
string connectionString = "Server=.;Database=StudentDB;Trusted_Connection=True;TrustServerCertificate=True;";try
{// 2. 创建连接对象using (SqlConnection connection = new SqlConnection(connectionString)){// 3. 打开连接,在using语句块中会自动关闭连接connection.Open();// 4. 创建命令对象string sql = "SELECT * FROM Students";SqlCommand cmd = new SqlCommand(sql, connection);// 5. 执行查询并读取数据using (SqlDataReader reader = cmd.ExecuteReader()){while (reader.Read()){// 假设Students表有id、name和age字段Console.WriteLine($"ID: {reader["id"]}, 姓名: {reader["name"]}, 年龄: {reader["age"]},年级: {reader["grade"]}" );}}}
}
catch (Exception ex)
{Console.WriteLine($"发生错误: {ex.Message}");
}
Console.WriteLine("按任意键退出...");
Console.ReadKey();
代码解释:
string connectionString = "Server=.;Database=StudentDB;Trusted_Connection=True;TrustServerCertificate=True;";
- 作用:定义用于连接数据库的连接字符串
- 参数说明:
- Server=.:指定数据库服务器为本地服务器(
.表示本地) - Database=StudentDB:指定要连接的数据库名称为
StudentDB - Trusted_Connection=True:使用Windows身份验证方式连接数据库,而不是使用SQL Server身份验证
- TrustServerCertificate=True:允许信任服务器证书,适用于使用自签名证书的情况,避免SSL证书错误
- Server=.:指定数据库服务器为本地服务器(
try
{// 数据库操作代码
}
catch (Exception ex)
{Console.WriteLine($"发生错误: {ex.Message}");
}
- 作用:创建一个SqlConnection对象,用于与数据库建立连接
using语句:确保在using块结束时自动调用connection.Dispose()方法释放数据库连接资源,即自动关闭连接- 参数:传入之前定义的connectionString
connection.Open();
- 作用:使用Open()方法与数据库建立实际的连接.此时,程序可以与数据库进行通信
string sql = "SELECT * FROM Students";
SqlCommand cmd = new SqlCommand(sql, connection);
- 作用:
- 定义要执行的SQL查询语句,这里是选择Students表中的所有记录
- 创建一个SqlCommand对象,表示要对数据库执行的命令
- 参数:
- sql:SQL查询字符串。
- connection:之前创建并打开的数据库连接对象
using (SqlDataReader reader = cmd.ExecuteReader())
{while (reader.Read()){// 读取数据并处理}
}
- 作用:
- 调用ExecuteReader()方法执行SQL查询,返回一个SqlDataReader对象,用于读取查询结果
- 使用 while (reader.Read())循环遍历结果集的每一行数据
using语句:确保reader对象在使用完毕后自动关闭并释放资源
Console.WriteLine($"ID: {reader["id"]}, 姓名: {reader["name"]}, 年龄: {reader["age"]},年级: {reader["grade"]}" );
- 作用:如果在try块中的任何位置发生异常,程序会捕获该异常
- 处理方式:输出错误信息ex.Message,以便了解错误的原因
五.在VS中对SQLServer中的Students表进行简单的增删改查
using Microsoft.Data.SqlClient;namespace StudentDemo
{internal class Program{static string connectionString = "Server=.;Database=StudentDB;Trusted_Connection=True;TrustServerCertificate=True;";static void Main(string[] args){while (true){Console.WriteLine("\n请选择操作:");Console.WriteLine("1. 查看所有学生");Console.WriteLine("2. 添加学生");Console.WriteLine("3. 修改学生");Console.WriteLine("4. 删除学生");Console.WriteLine("5. 退出");string choice = Console.ReadLine();switch (choice){case "1":QueryAllStudents();break;case "2":AddStudent();break;case "3":UpdateStudent();break;case "4":DeleteStudent();break;case "5":return;default:Console.WriteLine("无效的选择!");break;}}}static void QueryAllStudents(){try{using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();string sql = "SELECT * FROM Students";using (SqlCommand cmd = new SqlCommand(sql, connection))using (SqlDataReader reader = cmd.ExecuteReader()){while (reader.Read()){Console.WriteLine($"ID: {reader["Id"]}, 姓名: {reader["Name"]}, 年龄: {reader["Age"]}, 年级: {reader["Grade"]}");}}}}catch (Exception ex){Console.WriteLine($"查询出错: {ex.Message}");}}static void AddStudent(){try{Console.Write("请输入姓名:");string name = Console.ReadLine();Console.Write("请输入年龄:");int age = int.Parse(Console.ReadLine());Console.Write("请输入年级:");string grade = Console.ReadLine();using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();string sql = "INSERT INTO Students (Name, Age, Grade) VALUES (@Name, @Age, @Grade)";using (SqlCommand cmd = new SqlCommand(sql, connection)){cmd.Parameters.AddWithValue("@Name", name);cmd.Parameters.AddWithValue("@Age", age);cmd.Parameters.AddWithValue("@Grade", grade);int result = cmd.ExecuteNonQuery();Console.WriteLine($"成功添加 {result} 条记录");}}}catch (Exception ex){Console.WriteLine($"添加出错: {ex.Message}");}}static void UpdateStudent(){try{Console.Write("请输入要修改的学生ID:");int id = int.Parse(Console.ReadLine());Console.Write("请输入新的姓名(直接回车表示不修改):");string name = Console.ReadLine();Console.Write("请输入新的年龄(直接回车表示不修改):");string ageInput = Console.ReadLine();Console.Write("请输入新的年级(直接回车表示不修改):");string grade = Console.ReadLine();using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();string sql = "UPDATE Students SET ";List<string> updates = new List<string>();SqlCommand cmd = new SqlCommand();cmd.Connection = connection;if (!string.IsNullOrWhiteSpace(name)){updates.Add("Name = @Name");cmd.Parameters.AddWithValue("@Name", name);}if (!string.IsNullOrWhiteSpace(ageInput)){updates.Add("Age = @Age");cmd.Parameters.AddWithValue("@Age", int.Parse(ageInput));}if (!string.IsNullOrWhiteSpace(grade)){updates.Add("Grade = @Grade");cmd.Parameters.AddWithValue("@Grade", grade);}if (updates.Count > 0){sql += string.Join(", ", updates);sql += " WHERE Id = @Id";cmd.Parameters.AddWithValue("@Id", id);cmd.CommandText = sql;int result = cmd.ExecuteNonQuery();Console.WriteLine($"成功更新 {result} 条记录");}}}catch (Exception ex){Console.WriteLine($"修改出错: {ex.Message}");}}static void DeleteStudent(){try{Console.Write("请输入要删除的学生ID:");int id = int.Parse(Console.ReadLine());using (SqlConnection connection = new SqlConnection(connectionString)){connection.Open();string sql = "DELETE FROM Students WHERE Id = @Id";using (SqlCommand cmd = new SqlCommand(sql, connection)){cmd.Parameters.AddWithValue("@Id", id);int result = cmd.ExecuteNonQuery();Console.WriteLine($"成功删除 {result} 条记录");}}}catch (Exception ex){Console.WriteLine($"删除出错: {ex.Message}");}}}
}
以上代码实现了四个主要功能:
- QueryAllStudents(): 查询并显示所有学生信息
- AddStudent(): 添加新学生
- UpdateStudent(): 根据ID更新学生信息
- DeleteStudent(): 根据ID删除学生
每个方法都包含了错误处理
- 使用参数化查询来防止SQL注入
- 在更新操作中,支持只更新用户输入的字段
运行程序后,会显示一个菜单
- 输入对应的数字(1-5)来执行相应的操作
- 根据提示输入相应的信息
- 程序会显示操作结果
- 输入5可以退出程序

相关文章:
C# (图文教学)在C#的编译工具Visual Studio中使用SQLServer并对数据库中的表进行简单的增删改查--14
目录 一.安装SQLServer 二.在SQLServer中创建一个数据库 1.打开SQL Server Manager Studio(SSMS)连接服务器 2.创建新的数据库 3.创建表 三.Visual Studio 配置 1.创建一个简单的VS项目(本文创建为一个简单的控制台项目) 2.添加数据库连接 四.简单连通代码示例 简单连…...
4G DTU赋能智能配电环网柜通信运维管理
在智能电网建设持续推进下,智能配电环网柜作为配电网的关键节点设备,其稳定、高效运行对保障电力可靠供应是品质生活的基本保障。通信系统是实现智能配电环网柜远程监控与管理的核心纽带,而4G DTU(数据传输单元)凭借其…...
快速上手 HarmonyOS 应用开发
一、DevEco Studio 安装与配置 1. DevEco Studio 简介 DevEco Studio 是 HarmonyOS 的一站式集成开发环境(IDE),提供了丰富的工具和功能,支持 HarmonyOS 应用开发的全流程。 2. DevEco Studio 下载与安装 下载地址:…...
解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf问题 --九五小庞
参考链接:https://blog.csdn.net/User_bie/article/details/128102168 Nginx在编译安装时,需指定安装的模块...
Object类和hashcode方法
一.Object类. 1.所有类的父类,如果一个类没有继承那个类,那么都是默认继承于Object这个类。 2.object中存在的方法:(画横线的方法代表过时了,但是能用) 3.这里能用equals的方法是因为默认继承了Object这个…...
速通Docker === 介绍与安装
目录 Docker介绍 Docker优势 Docker组件 Docker CLI (命令行接口) Docker Host (Docker 守护进程) 容器 (Container) 镜像 (Image) 仓库 (Registry) 关系总结 应用程序部署方式 传统部署 (Traditional Deployment) 虚拟化部署 (Virtualization Deployment) 容器部署…...
OpenStack 网络服务的插件架构
OpenStack 的网络服务具有灵活的插件架构,可支持多种不同类型的插件以满足不同的网络需求。以下是对 OpenStack 网络服务插件架构中一些常见插件类型的介绍: 一、SDN 插件 Neutron 与 SDN 的集成:在 OpenStack 网络服务里,SDN 插…...
SAP SD销售模块组织架构介绍(销售组织、分销渠道等)
【SAP系统研究】 #SAP #SD #销售管理 #销售组织 一、销售组织 Sales Organization,是为企业销售而建立的组织单元,用于物料和服务的销售。销售组织下又可以分为若干个分销渠道,用于不同的市场服务;分销渠道又可以按产品组的不同…...
CMake学习笔记(2)
1. 嵌套的CMake 如果项目很大,或者项目中有很多的源码目录,在通过CMake管理项目的时候如果只使用一个CMakeLists.txt,那么这个文件相对会比较复杂,有一种化繁为简的方式就是给每个源码目录都添加一个CMakeLists.txt文件ÿ…...
Linux下源码编译安装Nginx1.24及服务脚本实战
1、下载Nginx [rootlocalhost ~]# wget -c https://nginx.org/download/nginx-1.24.0.tar.gz2、解压 [rootlocalhost ~]# tar xf nginx-1.24.0.tar.gz -C /usr/local/src/3、安装依赖 [rootlocalhost ~]# yum install gcc gcc-c make pcre-devel openssl-devel -y4、 准备 N…...
4、dockerfile实现lnmp和elk
dockerfile实现lnmp 使用dockerfile n:nginx,172.111.0.10 m:mysql,172.111.0.20 p:php,172.111.0.30 安装配置nginx 1、准备好nginx和wordpress安装包 2、配置dockerfile 3、配置nginx主配置文件ngin…...
Portainer.io安装并配置Docker远程访问及CA证书
Portainer.io安装并配置Docker远程访问及CA证书 文章目录 Portainer.io安装并配置Docker远程访问及CA证书一.安装 Portainer.io2.启动容器 二.docker API远程访问并配置CA安全认证1.配置安全(密钥)访问2.补全CA证书信息3.生成server-key.pem4.创建服务端签名请求证书文件5.创建…...
探索 Transformer²:大语言模型自适应的新突破
目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…...
Flutter 多终端测试 自定义启动画面 更换小图标和应用名称
多终端测试 flutter devices flutter run -d emulator-5554 flutter run -d emulator-5556 自定义启动画面 之前: 进入assert 3x 生成 1x 2x dart run flutter_native_splash:create dart run flutter_native_splash:remove 现在(flutter_nativ…...
rsarsa-给定pqe求私钥对密文解密
题目: Math is cool! Use the RSA algorithm to decode the secret message, c, p, q, and e are parameters for the RSA algorithm.p 96484230290105156765905517400104265349457376392357398006439893520398525072984913995610350091634270503701075707336333…...
flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈
flutter开发-figma交互设计图可以转换为flutter源代码-如何将设计图转换为flutter源代码-优雅草央千澈 开发背景 可能大家听过过蓝湖可以转ui设计图为vue.js,react native代码,那么请问听说过将figma的设计图转换为flutter源代码吗?本文优雅草央千澈带…...
Deep4SNet: deep learning for fake speech classification
Deep4SNet:用于虚假语音分类的深度学习 摘要: 虚假语音是指即使通过人工智能或信号处理技术产生的语音记录。生成虚假录音的方法有"深度语音"和"模仿"。在《深沉的声音》中,录音听起来有点合成,而在《模仿》中…...
3 前端: Web开发相关概念 、HTML语法、CSS语法
文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…...
SpringBoot工程快速启动
1.问题导入 以后我们和前端开发人员协同开发,而前端开发人员需要测试前端程序就需要后端开启服务器,这就受制于后端开发人员。 为了摆脱这个受制,前端开发人员尝试着在自己电脑上安装 Tomcat 和 Idea ,在自己电脑上启动后端程序&a…...
Unity WebGL:本机部署,运行到手机
Unity WebGL 简单介绍一下Unity WebGL的技术方案,在WebGL平台出包后,Unity的运行时C/C代码是通过Emscripten编译成了WebAssembly/Wasm;游戏逻辑部分的C#代码是先通过il2cpp转成C再编译转成的Wasm,Unity程序就就可以在支持WebAsse…...
Dan Koe: 如果你有多重兴趣,请不要浪费接下来的2-3年
本文整理自 Dan Koe 原文。Dan Koe 是 YouTube、X 等平台拥有数百万粉丝的个人成长领域创作者,以"一人公司"理念、深度内容创作和高效 AI 工作流著称。你是否曾因为无法只专注一件事而感到自责? 你学设计,又想学编程;读…...
Phi-4-mini-reasoning企业级落地:金融风控规则推理引擎构建案例
Phi-4-mini-reasoning企业级落地:金融风控规则推理引擎构建案例 1. 项目背景与模型介绍 在金融风控领域,规则推理引擎是核心决策系统的重要组成部分。传统规则引擎往往面临维护成本高、灵活性差、难以应对复杂场景等问题。Phi-4-mini-reasoning作为一款…...
基于FPGA的伺服驱动系统:电流环控制与多环路反馈、SVPWM及编码器协议实现的研究
伺服驱动FPGA电流环,包含坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM,编码器协议,电流环和编码器协议都是FPGA里实现的伺服驱动系统里玩FPGA可不是闹着玩的,尤其是…...
3步搭建PP-DocLayoutV3服务:快速体验文档版面分析的强大能力
3步搭建PP-DocLayoutV3服务:快速体验文档版面分析的强大能力 1. 引言:文档版面分析的价值 在日常工作中,我们经常需要处理各种文档——合同、论文、报告、书籍等。传统OCR技术虽然能识别文字,但往往无法理解文档的结构ÿ…...
教育博主私藏!PPT生成网站实用指南
作为一名教育博主,我深刻体会到制作 PPT 是教育工作者日常工作中不可或缺的一部分。借助合适的工具,能有效降低 PPT 制作门槛,提升演示内容的专业度和吸引力。今天,就给大家分享几款亲测好用的 PPT 生成网站,助力大家高…...
工业以太网双雄:从协议原理到选型落地,EtherCAT与PROFINET实战解析
1. 工业以太网的双雄之争:为什么选型这么难? 第一次接触工业以太网协议选型时,我盯着EtherCAT和PROFINET的参数表发呆了整整一上午。就像面对两个各有所长的武林高手,一个轻功了得,一个内力深厚,实在难以抉…...
基于AI政策路径与通胀预期模型的美联储决策分析:鲍威尔观望信号引发加息预期归零
摘要:本文通过构建AI政策路径预测模型,结合通胀预期识别系统、能源价格传导算法与劳动力市场评估框架,对美联储在当前环境下的利率决策逻辑进行分析,重点解析“观望策略”背后的模型依据及市场加息预期快速回落的原因。一、AI政策…...
Vue项目中天地图显示不全?试试这个MutationObserver的巧妙解法
Vue项目中天地图显示不全的终极解决方案:MutationObserver深度解析 第一次在Vue项目中集成天地图时,那种地图只渲染出一半的挫败感至今记忆犹新。控制台没有报错,API调用看起来也没问题,但地图就像被无形的剪刀裁切过一样…...
能做表格的 AI 软件:Excel-Agent,AI 原生重构表格数据分析全流程
当传统 Excel 被卡顿、复杂公式、海量数据难处理、手动重复操作困住时,能做表格的 AI 软件正成为效率破局关键 —— 而 Excel-Agent,正是专为 Excel 场景打造的 AI 数据智能体,以自然语言交互、本地高效计算、全链路数据处理能力,…...
路由器、交换机、光猫有什么区别?网络设备基础入门
路由器、交换机、光猫有什么区别?网络设备基础入门前言一、光猫、路由器、交换机分别是干什么的二、三者最核心的区别到底是什么1.它是否直接面对运营商网络?2.它是否负责“让多台设备上网”?3.它是否主要用于扩展有线接口?三、先…...
