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

相关推荐
周胡杰6 分钟前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj00110 分钟前
navicate如何设置数据库引擎
数据库·mysql
赵渝强老师13 分钟前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头14 分钟前
Oracle注释详解
数据库·oracle
御控工业物联网31 分钟前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
小码编匠1 小时前
WPF 自定义分页控件,可通过样式模板修改外观
后端·c#·.net
GJCTYU2 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法
Code季风2 小时前
SQL关键字快速入门:CASE 实现条件逻辑
javascript·数据库·sql
weixin_478689762 小时前
操作系统【2】【内存管理】【虚拟内存】【参考小林code】
数据库·nosql