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的主要功能:

  1. 数据存储和管理:支持各种数据类型,包括结构化数据,非结构化数据和半结构化数据
  2. 安全性:提供了多层次的安全机制,如数据库加密,用户权限管理和审计功能
  3. 高可用性和灾难恢复:支持数据库镜像,日志传送,故障转移群集和Always On可用性组
  4. 性能优化:内置性能监控和优化工具,如索引调优,查询优化器和数据库引擎自动调优
  5. 集成服务:包括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证书错误
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可以退出程序

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7 下 MySQL 5.7 的详细安装与配置

1、安装准备 下载mysql5.7的安装包 https://dev.mysql.com/get/mysql-5.7.29-1.el7.x86_64.rpm-bundle.tar 下载后上传至/home目录下 2、mysql5.7安装 2.1、更新yum并安装依赖 yum update -y sudo yum install -y wget sudo yum install libaio sudo yum install perl su…

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

TY1801 反激变换器PWM GaN功率开关

TY1801 是一款针对离线式反激变换器的多模式 PWM GaN 功率开关。TY1801 内置 GaN 功率管,它具备超宽 的 VCC 工作范围&#xff0c;非常适用于 PD 快充等要求宽输出电压的应用场合,系统不需要使用额外的绕组或外围降压电路&#xff0c;节省系统 BOM 成本。TY1801 支持 Burst&…

Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论&#xff1a; Swgger 3.0 与Swagger 2.0 区别很大&#xff0c;Swagger3.0用了最新的注释实现更强大的功能&#xff0c;同时使得代码更优雅。 就个人而言&#xff0c;如果新项目推荐使用Swgger 3.0&#xff0c;对于工具而言新的一定比旧的好&#xff1b;对接于旧项目原…

【算法】图解两个链表相交的一系列问题

问&#xff1a; 给定两个可能有环也可能无环的单链表&#xff0c;头节点head1和head2。请实现一个函数&#xff0c;如果两个链表相交&#xff0c;请返回相交的第一个节点&#xff1b;如果不相交&#xff0c;返回null。如果两个链表长度之和为N&#xff0c;时间复杂度请达到O(N…

2025开年解读:AI面试 VS 传统面试本质上区别有哪些?

2024年&#xff0c;AI面试以其高效、便捷的特点逐渐走入大众视野&#xff0c;成为越来越多企业的首选。2025年开年&#xff0c;AI面试再次出现爆发式增长趋势&#xff0c;那么&#xff0c;相较于传统的面对面面试&#xff0c;AI面试究竟有哪些本质上的区别呢&#xff1f;这不仅…

springboot web基础分层解耦三层架构IOC详解 DI详解 依赖注入

三层架构 分层解耦 解除了耦合 IOC DI入门 IOC详解 组件扫描 DI详解 一般用第一种&#xff0c;规范性高用第二种 第三种一般不用 注意事项

HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (五、电影详情页的设计实现)

在上一篇文章中&#xff0c;完成了电影列表页的开发。接下来&#xff0c;将进入电影详情页的设计实现阶段。这个页面将展示电影的详细信息&#xff0c;包括电影海报、评分、简介以及相关影人等。将使用 HarmonyOS 提供的常用组件&#xff0c;并结合第三方库 nutpi/axios 来实现…

交叉编译avahi到aarch64平台

谢绝转载 一、背景 准备学习无中心网络组网&#xff0c;研究如何实现无中心网络IP分配 二、环境搭建过程 找到的有参考价值的网页&#xff1a; https://zhuanlan.zhihu.com/p/60892150322 gcc_7.5.sh #! /bin/shexport PATH/home/ws/chain_tools/gcc-linaro-7.5.0-2019.1…

springMVC实现文件上传

目录 一、创建项目 二、引入依赖 三、web.xml 四、编写上传文件的jsp页面 五、spring-mvc.xml 六、controller 七、运行 一、创建项目 二、引入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.o…

6.1 MySQL数字函数和条件函数

以前我们在课程中使用过一些mysql的内置函数&#xff0c;比如说四舍五入的round函数&#xff0c;做日期计算的data, datediff函数等等。那么本次课程咱们就来系统的学习一下mysql的这些内置函数&#xff0c;我们使用编程语言写程序的时候&#xff0c;通常会把某一项业务功能封装…

设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo

1.策略模式 好处&#xff1a;动态切换算法或行为场景&#xff1a;实现同一功能用到不同的算法时和简单工厂对比&#xff1a;简单工厂是通过参数创建对象&#xff0c;调用同一个方法&#xff08;实现细节不同&#xff09;&#xff1b;策略模式是上下文切换对象&#xff0c;调用…

网安——CSS

一、CSS基础概念 CSS有两个重要的概念&#xff0c;分为样式和布局 CSS的样式分为两种&#xff0c;一种是文字的样式&#xff0c;一种是盒模型的样式 CSS的另一个重要的特质就是辅助页面布局&#xff0c;完成HTML不能完成的功能&#xff0c;比如并排显示或精确定位显示 从HT…

Pytorch基础教程:从零实现手写数字分类

文章目录 1.Pytorch简介2.理解tensor2.1 一维矩阵2.2 二维矩阵2.3 三维矩阵 3.创建tensor3.1 你可以直接从一个Python列表或NumPy数组创建一个tensor&#xff1a;3.2 创建特定形状的tensor3.3 创建三维tensor3.4 使用随机数填充tensor3.5 指定tensor的数据类型 4.tensor基本运算…

git操作(bitbucket仓库)

在代码远程版本控制和提交过程中需要经常使用git命令&#xff0c;熟练使用git是一个软件工程师必备的技能之一。 将主版本代码fork到自己的 bitbucket 子仓库中 克隆到本地 利用ssh链接进行克隆&#xff0c;将 fork 的子仓库克隆到本地。 git clone ssh://{$你fork的子bitbu…

【AIGC】SYNCAMMASTER:多视角多像机的视频生成

标题&#xff1a;SYNCAMMASTER: SYNCHRONIZING MULTI-CAMERA VIDEO GENERATION FROM DIVERSE VIEWPOINTS 主页&#xff1a;https://jianhongbai.github.io/SynCamMaster/ 代码&#xff1a;https://github.com/KwaiVGI/SynCamMaster 文章目录 摘要一、引言二、使用步骤2.1 TextT…

登录系统网址作业

目录 主页代码 主页​编辑 效果1 登录页面代码 登录页面 效果2 注册页面代码 注册页面 效果3 主页代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content&qu…

[Do374]Ansible一键搭建sftp实现用户批量增删

[Do374]Ansible一键搭建sftp实现用户批量增删 1. 前言2. 思路3. sftp搭建及用户批量新增3.1 配置文件内容3.2 执行测试3.3 登录测试3.4 确认sftp服务器配置文件 4. 测试删除用户 1. 前言 最近准备搞一下RHCA LV V,外加2.9之后的ansible有较大变化于是练习下Do374的课程内容. 工…

00_专栏《Redis 7.x企业级开发实战教程》介绍

大家好,我是袁庭新。Redis作为一款高性能、多用途的内存数据库,凭借其丰富的数据结构、高速读写能力、原子操作特性及发布订阅等功能,在缓存加速、分布式锁、消息队列等场景中不可或缺,极大提升了系统性能与开发效率,是现代互联网应用架构的关键组件。 你是否在学习Redis…

wow-agent 学习笔记

wow-agent-课程详情 | Datawhale 前两课比较基础&#xff0c;无笔记 第三课 阅卷智能体这一块&#xff0c;曾经做过一点和AI助教相关的内容&#xff0c;也是用了一个prompt去进行CoT&#xff0c;但是风格和课程中的不太相同&#xff0c;在下面附上我的prompt 你是一名资深教…