C# 实现 SQL Server 的增删改查操作

SQL Server 简介

SQL Server 是微软公司开发的关系型数据库管理系统(RDBMS),主要用于数据存储和管理。它支持 SQL 查询语言,并提供了事务处理、数据安全、备份与恢复以及高可用性等关键功能。SQL Server 适用于各种规模的企业应用,能够处理大数据量和高并发的需求,并集成了报表服务、分析服务等高级功能。

本文将介绍如何使用 C# 实现对 SQL Server 数据库的增、删、改、查(CRUD)操作。以下是示例代码:

cs 复制代码
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace SQLServerTest
{
    class Program
    {
        // 数据库连接字符串
        static string connectionString = "Server=.;Database=SchoolDB;User Id=sa;Password=saabc123;";

        static void Main(string[] args)
        {
             以下是各种操作的示例,当前被注释掉,可以根据需要启用

             增加操作
            //AddStudent("John Doe", 20, "A");

             修改操作
            //UpdateStudent(1, "John Doe", 21, "B");

             删除操作
            //DeleteStudent(1);

            // 查找所有学生
            GetStudents();
            
            // 等待用户按键后退出程序
            Console.ReadKey();
        }

        // 增加学生
        static void AddStudent(string name, int age, string grade)
        {
            // 定义SQL插入语句
            string query = "INSERT INTO Students (Name, Age, Grade) VALUES (@Name, @Age, @Grade)";

            // 使用using语句来自动管理数据库连接
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                // 创建SQL命令对象,绑定查询语句
                SqlCommand cmd = new SqlCommand(query, conn);
                
                // 添加参数,防止SQL注入
                cmd.Parameters.AddWithValue("@Name", name);
                cmd.Parameters.AddWithValue("@Age", age);
                cmd.Parameters.AddWithValue("@Grade", grade);

                // 打开连接
                conn.Open();
                
                // 执行插入命令,不返回任何数据
                cmd.ExecuteNonQuery();
                
                // 输出操作成功的信息
                Console.WriteLine($"Student {name} added.");
            }
        }

        // 查找所有学生
        static void GetStudents()
        {
            // 定义SQL查询语句,查询所有学生
            string query = "SELECT * FROM Students";

            // 使用using语句来自动管理数据库连接
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                // 创建一个SQL数据适配器,用于执行查询并填充数据表
                SqlDataAdapter da = new SqlDataAdapter(query, conn);
                
                // 创建数据表对象来存储查询结果
                DataTable dt = new DataTable();
                
                // 填充数据表
                da.Fill(dt);

                // 输出查询结果
                Console.WriteLine("\nStudents List:");
                // 遍历数据表的每一行
                foreach (DataRow row in dt.Rows)
                {
                    // 输出每个学生的信息
                    Console.WriteLine($"Id: {row["Id"]}, Name: {row["Name"]}, Age: {row["Age"]}, Grade: {row["Grade"]}");
                }
            }
        }

        // 更新学生信息
        static void UpdateStudent(int id, string name, int age, string grade)
        {
            // 定义SQL更新语句
            string query = "UPDATE Students SET Name = @Name, Age = @Age, Grade = @Grade WHERE Id = @Id";

            // 使用using语句来自动管理数据库连接
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                // 创建SQL命令对象,绑定更新语句
                SqlCommand cmd = new SqlCommand(query, conn);
                
                // 添加参数,防止SQL注入
                cmd.Parameters.AddWithValue("@Id", id);
                cmd.Parameters.AddWithValue("@Name", name);
                cmd.Parameters.AddWithValue("@Age", age);
                cmd.Parameters.AddWithValue("@Grade", grade);

                // 打开连接
                conn.Open();
                
                // 执行更新命令,返回受影响的行数
                int rowsAffected = cmd.ExecuteNonQuery();
                
                // 输出操作结果
                if (rowsAffected > 0)
                {
                    Console.WriteLine($"Student with Id {id} updated.");
                }
                else
                {
                    Console.WriteLine($"No student found with Id {id}.");
                }
            }
        }

        // 删除学生
        static void DeleteStudent(int id)
        {
            // 定义SQL删除语句
            string query = "DELETE FROM Students WHERE Id = @Id";

            // 使用using语句来自动管理数据库连接
            using (SqlConnection conn = new SqlConnection(connectionString))
            {
                // 创建SQL命令对象,绑定删除语句
                SqlCommand cmd = new SqlCommand(query, conn);
                
                // 添加参数,防止SQL注入
                cmd.Parameters.AddWithValue("@Id", id);

                // 打开连接
                conn.Open();
                
                // 执行删除命令,返回受影响的行数
                int rowsAffected = cmd.ExecuteNonQuery();
                
                // 输出操作结果
                if (rowsAffected > 0)
                {
                    Console.WriteLine($"Student with Id {id} deleted.");
                }
                else
                {
                    Console.WriteLine($"No student found with Id {id}.");
                }
            }
        }
    }
}

代码解释:

1.数据库连接字符串:connectionString 用于定义与 SQL Server 数据库的连接信息,如服务器地址、数据库名称、用户名和密码等。

2.AddStudent 方法:此方法用于将新的学生信息(姓名、年龄、成绩)插入到 Students 表中。它使用了 SQL 插入语句和参数化查询,以避免 SQL 注入。

3.GetStudents 方法:此方法从 Students 表中查询所有学生的信息,并使用 SqlDataAdapter 将查询结果填充到 DataTable 中,再通过循环遍历并显示每一行数据。

4.UpdateStudent 方法:此方法用于更新指定学生的信息。它接受学生的 Id、姓名、年龄和成绩,然后执行 SQL 更新语句。如果更新成功,打印提示信息;如果未找到该学生,提示无效的 ID。

5.DeleteStudent 方法:此方法删除指定 ID 的学生记录。它同样使用参数化查询来防止 SQL 注入。如果删除成功,显示相关提示;否则,提示没有找到该学生。

总结

通过 C# 结合 ADO.NET,可以非常方便地实现对 SQL Server 数据库的增删改查操作。在实际开发中,可以根据需求进一步封装数据库操作,提升代码的可维护性与扩展性。


源码地址:https://download.csdn.net/download/weixin_44643352/90059354

相关推荐
Gent_倪8 分钟前
MySQL分库、分表、分区详解
数据库·mysql
额额额对了14 分钟前
Linux 数据库开发实战:使用 C 语言与 SQLite3 构建轻量级终端词典
linux·数据库·oracle
qq_2468397532 分钟前
postgresql xxhash64 哈希函数实现
数据库·postgresql·哈希算法
希望奇迹很安静33 分钟前
等级保护测评
网络·数据库
会博通·代码搬运工44 分钟前
疾控档案落地难点:异构业务系统并存,高价值纸质凭证如何回流业务闭环
数据库·档案管理·档案管理系统·智能扫描设备·会博通
数智启示录1 小时前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录1 小时前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
Java小白笔记1 小时前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
—Miss. Z—1 小时前
计算机三级数据库技术—填空题
数据库·mysql
数智启示录1 小时前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache