尧图精选

SQL Server + C# 数据库课程设计实战:从环境搭建到增删改查完整指南

🕒 发布时间:2026/10/2 22:50:23 📁 来源:尧图网络
简介这份资源是安徽工业大学数理学院《数据库系统概论》课程设计报告书面向信息与计算科学等专业学生及需要完成数据库课程设计的读者围绕基于Windows环境的学生成绩管理系统展开帮助读者理解从需求分析、系统设计到开发测试的完整流程。报告以Microsoft Visual Studio 2013为开发工具、SQL Server 2008为数据库采用C/S架构涵盖用户登录、学生信息管理、成绩增删改查、新用户注册与帮助菜单等模块并涉及SQL语句应用、数据安全性与界面设计等细节。压缩包内共1个doc文档约532KB内容包含摘要、目录、需求分析、功能模块图、实现方法与参考文献结构完整可直接作为课程设计报告的写作参考与模板。目前已有68人学习适合需要借鉴报告框架、梳理设计思路或对照完善自身课程设计的学生使用。1. 从一份“安工大数据库课程设计报告书.doc”说起SQL Server C# 的课设到底在做什么如果你手里正躺着一份《安工大数据库课程设计报告书.doc》的模板或者你被分配到的题目就是“用 SQL Server 和 C# 做一个 XX 管理系统”那你大概率正卡在同一个地方知道要交报告但不知道报告背后那套东西到底该怎么跑起来。这份文档表面上是 Word 排版任务实质是一次完整的数据库应用开发闭环——需求分析、E-R 建模、建库建表、写增删改查、用 C# 做前端界面、最后把过程写成报告。热搜里“数据库课程设计”“SQL Server 安装”“C# 连接数据库”“Visual Studio”这几个词反复出现说明绝大多数人卡的不是理论而是环境、连接字符串和代码怎么落地。这篇笔记就按一线做法把从装 SQL Server 到 C# 窗体跑通增删改查、再到报告书里该写什么完整拆一遍。适合正在做课设的本科生也适合想用 C# 快速搭一个数据库小工具的初学者。2. 环境选型与安装SQL Server、SSMS、Visual Studio 怎么配不翻车2.1 版本怎么选SQL Server 2019/2022 与 Express 的取舍课程设计不是生产环境选型第一原则是“装得上、连得通、报告里写得清楚”。SQL Server 目前主流是 2019 和 2022 两个大版本功能上对课设来说完全够用。真正要区分的是版本类型Enterprise企业版功能全但安装包大、对机器要求高Developer开发者版功能和 Enterprise 基本一致但授权只限开发测试课设用完全合规Express快速版免费、体积小但有 10GB 单库上限对课设数据量来说绰绰有余。我一般给课设的建议是机器内存 8GB 以上、想省事直接上 SQL Server 2019 Developer 或 2022 Developer机器一般、只想快速跑通用 Express。注意 Express 默认实例名是SQLEXPRESS连接字符串里要写Serverlocalhost\SQLEXPRESS这一点后面会反复用到。安装时有一个必选项容易被忽略在“功能选择”里一定要勾上“数据库引擎服务”和“客户端工具连接”。如果只勾了引擎没勾客户端工具后面 SSMS 可能连不上本地实例。安装完成后SQL Server 配置管理器里确认两件事SQL Server 服务正在运行TCP/IP 协议已启用默认可能是禁用的禁用状态下 C# 远程连接会直接失败。2.2 SSMS 与 Visual Studio 的安装顺序SSMSSQL Server Management Studio是管理数据库的图形工具和 SQL Server 引擎是分开安装的。常见做法是先装 SQL Server 引擎再单独装 SSMS。SSMS 版本不用追新18.x 或 19.x 都能连 2019/2022。安装 SSMS 时如果提示需要 .NET 运行时按提示装即可。Visual Studio 这边课设用 Community 版免费且够用。安装时工作负载勾“NET 桌面开发”这一项里包含 Windows 窗体应用WinForms和 WPF 所需组件。如果你打算用控制台程序做课设勾“.NET 桌面开发”同样够。注意 VS 2022 和 SQL Server 之间没有强版本绑定VS 2022 连 SQL Server 2019/2022 都没问题。安装顺序上我习惯先 SQL Server 引擎 → SSMS → Visual Studio。这样在 VS 里建项目时数据连接向导能直接识别到本地实例。如果先装了 VS 再装 SQL Server也不影响只是 VS 里的“连接到数据库”对话框可能需要手动输入服务器名。2.3 验证环境是否真的通了装完别急着写代码先用 SSMS 连一次。打开 SSMS服务器名称填localhost或.\SQLEXPRESSExpress 版身份验证用 Windows 身份验证点连接。能进对象资源管理器说明引擎和客户端都正常。然后在 SSMS 里新建一个查询窗口执行下面这段 SQL 验证建库权限-- 创建一个课设用的测试库验证当前登录账号有建库权限 CREATE DATABASE CourseDesignTest; GO USE CourseDesignTest; GO -- 建一张最简单的表验证建表权限 CREATE TABLE TestTable ( Id INT PRIMARY KEY IDENTITY(1,1), Name NVARCHAR(50) NOT NULL ); GO -- 插入一条数据验证写入权限 INSERT INTO TestTable (Name) VALUES (N测试数据); GO -- 查询验证 SELECT * FROM TestTable; GO这段代码的逻辑是建库 → 切库 → 建表 → 插数据 → 查数据五步覆盖了课设最基础的权限链路。参数上IDENTITY(1,1)表示自增列从 1 开始每次加 1NVARCHAR(50)是可变长度 Unicode 字符串中文不会乱码。如果这五步都成功说明数据库侧环境完全就绪。如果建库报“权限不足”说明当前 Windows 账号不是 sysadmin需要用安装时设置的 sa 账号或让管理员加权限。提示Express 版默认可能没启用 sa 账号课设如果要用 SQL Server 身份验证登录需要在 SSMS 里把服务器属性改为“SQL Server 和 Windows 身份验证模式”并启用 sa 账号、设置密码然后重启 SQL Server 服务。3. 从 E-R 图到建表脚本课设数据库设计的落地写法3.1 需求分析与 E-R 建模报告书里最该写清楚的部分课设报告书里“需求分析”和“概念结构设计”两章很多人写成空话。实际做法是先列出系统有哪些“东西”实体每个东西有哪些属性东西和东西之间是什么关系。比如一个“学生成绩管理系统”实体有学生、课程、教师、班级学生和课程是多对多一个学生选多门课一门课被多个学生选这个多对多关系在关系模型里要拆成一张“选课”表。E-R 图不用画得多漂亮但实体、属性、联系三要素要齐。报告书里可以用文字加表格描述比如“学生实体学号主键、姓名、性别、出生日期、班级编号”。这一步做扎实后面建表就是照抄。3.2 关系模式转换与建表脚本E-R 图转关系模式有固定规则每个实体转一张表实体的主键就是表的主键一对多关系把“一”方的主键放到“多”方做外键多对多关系单独建一张关联表主键是两个外键的组合。下面以一个简化的学生选课系统为例给出完整建表脚本-- 建库指定字符集和排序规则中文环境建议用 Chinese_PRC_CI_AS CREATE DATABASE StudentCourseDB; GO USE StudentCourseDB; GO -- 学生表学号为主键姓名非空 CREATE TABLE Student ( StudentNo VARCHAR(12) PRIMARY KEY, -- 学号定长12位 StudentName NVARCHAR(20) NOT NULL, -- 姓名Unicode 防乱码 Gender NCHAR(1) DEFAULT N男, -- 性别默认男 BirthDate DATE NULL, -- 出生日期可空 ClassNo VARCHAR(10) NULL -- 班级编号 ); GO -- 课程表课程号为主键 CREATE TABLE Course ( CourseNo VARCHAR(10) PRIMARY KEY, -- 课程号 CourseName NVARCHAR(50) NOT NULL, -- 课程名 Credit DECIMAL(3,1) NULL -- 学分如 3.5 ); GO -- 选课表多对多关联主键为学号课程号组合 CREATE TABLE SC ( StudentNo VARCHAR(12) NOT NULL, -- 学号外键 CourseNo VARCHAR(10) NOT NULL, -- 课程号外键 Score DECIMAL(5,1) NULL, -- 成绩 CONSTRAINT PK_SC PRIMARY KEY (StudentNo, CourseNo), CONSTRAINT FK_SC_Student FOREIGN KEY (StudentNo) REFERENCES Student(StudentNo), CONSTRAINT FK_SC_Course FOREIGN KEY (CourseNo) REFERENCES Course(CourseNo) ); GO这段脚本的关键点VARCHAR和NVARCHAR的区别在于后者存 Unicode中文姓名、课程名必须用NVARCHAR否则插入中文可能变问号。DECIMAL(5,1)表示总共 5 位、小数点后 1 位成绩 100.0 刚好放得下。外键约束FOREIGN KEY保证选课表里的学号必须在学生表里存在这是报告书“完整性约束”章节的实证材料。3.3 插入测试数据与验证约束建完表要插数据验证。注意插入顺序先插学生和课程再插选课否则外键约束会报错。-- 先插学生和课程 INSERT INTO Student (StudentNo, StudentName, Gender, BirthDate, ClassNo) VALUES (2023001, N张三, N男, 2005-03-12, CS2301), (2023002, N李四, N女, 2005-07-25, CS2301); INSERT INTO Course (CourseNo, CourseName, Credit) VALUES (C001, N数据库原理, 4.0), (C002, NC#程序设计, 3.5); -- 再插选课外键必须已存在 INSERT INTO SC (StudentNo, CourseNo, Score) VALUES (2023001, C001, 88.5), (2023001, C002, 92.0), (2023002, C001, 76.0); GO -- 验证查张三选了哪些课 SELECT s.StudentName, c.CourseName, sc.Score FROM SC sc JOIN Student s ON sc.StudentNo s.StudentNo JOIN Course c ON sc.CourseNo c.CourseNo WHERE s.StudentName N张三; GO如果故意插一条学号为9999999的选课记录会报外键冲突错误这正好可以在报告书“完整性验证”里写一笔。参数上JOIN是三表关联查询课设报告里的“查询功能”基本都靠它。4. C# 连接 SQL ServerWinForms 增删改查的最小可运行代码4.1 连接字符串怎么写三种常见格式与踩坑点C# 连 SQL Server 用System.Data.SqlClient.NET Framework或Microsoft.Data.SqlClient.NET Core/.NET 5。课设用 WinForms 的话.NET Framework 4.7.2/4.8 最常见直接用System.Data.SqlClient即可不用额外装包。连接字符串三种典型写法场景连接字符串说明Windows 身份验证默认实例Serverlocalhost;DatabaseStudentCourseDB;Integrated SecurityTrue;最省事课设推荐Windows 身份验证ExpressServerlocalhost\SQLEXPRESS;DatabaseStudentCourseDB;Integrated SecurityTrue;实例名不能漏SQL 身份验证Serverlocalhost;DatabaseStudentCourseDB;User Idsa;Password你的密码;需启用 sa 和混合模式一个高频翻车点连接字符串里Server写成localhost但实际是 Express 实例会报“无法连接到服务器”。另一个是 SQL Server 的 TCP/IP 没启用报“provider: TCP Provider, error: 0”。解决方法是打开 SQL Server 配置管理器启用 TCP/IP 并重启服务。4.2 封装一个简单的数据库访问类课设代码不用太复杂但建议把连接和查询封装一下报告书里也显得有结构。下面是一个最小封装using System; using System.Data; using System.Data.SqlClient; namespace CourseDesign { public static class DbHelper { // 连接字符串按实际实例名和数据库名修改 private static readonly string ConnStr Serverlocalhost;DatabaseStudentCourseDB;Integrated SecurityTrue;; // 执行增删改返回受影响行数 public static int ExecuteNonQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn new SqlConnection(ConnStr)) { conn.Open(); using (SqlCommand cmd new SqlCommand(sql, conn)) { if (parameters ! null) cmd.Parameters.AddRange(parameters); return cmd.ExecuteNonQuery(); } } } // 执行查询返回 DataTable public static DataTable ExecuteQuery(string sql, params SqlParameter[] parameters) { using (SqlConnection conn new SqlConnection(ConnStr)) { conn.Open(); using (SqlCommand cmd new SqlCommand(sql, conn)) { if (parameters ! null) cmd.Parameters.AddRange(parameters); using (SqlDataAdapter adapter new SqlDataAdapter(cmd)) { DataTable dt new DataTable(); adapter.Fill(dt); return dt; } } } } } }逻辑说明using保证连接和命令对象用完即释放避免连接泄漏。params SqlParameter[]支持可变参数调用时可以传 0 个或多个参数。ExecuteNonQuery用于 INSERT/UPDATE/DELETEExecuteQuery用于 SELECT 并返回DataTable方便直接绑定到 DataGridView。参数化查询是防 SQL 注入的关键课设报告里可以专门写一节“安全性设计”。4.3 WinForms 界面绑定与增删改查按钮实现假设窗体上有一个DataGridView命名dgvStudent、四个按钮增删改查和几个 TextBox。查询按钮的代码private void btnQuery_Click(object sender, EventArgs e) { // 按姓名模糊查询参数化防注入 string sql SELECT StudentNo, StudentName, Gender, BirthDate, ClassNo FROM Student WHERE StudentName LIKE name; SqlParameter[] ps { new SqlParameter(name, % txtName.Text.Trim() %) }; dgvStudent.DataSource DbHelper.ExecuteQuery(sql, ps); }新增按钮private void btnAdd_Click(object sender, EventArgs e) { string sql INSERT INTO Student (StudentNo, StudentName, Gender, BirthDate, ClassNo) VALUES (no, name, gender, birth, class); SqlParameter[] ps { new SqlParameter(no, txtNo.Text.Trim()), new SqlParameter(name, txtName.Text.Trim()), new SqlParameter(gender, cmbGender.Text), new SqlParameter(birth, string.IsNullOrEmpty(txtBirth.Text) ? (object)DBNull.Value : txtBirth.Text), new SqlParameter(class, txtClass.Text.Trim()) }; int rows DbHelper.ExecuteNonQuery(sql, ps); MessageBox.Show(rows 0 ? 新增成功 : 新增失败); btnQuery_Click(null, null); // 刷新列表 }参数说明DBNull.Value用于处理可空日期字段直接传null会报参数未提供值。LIKE name配合%...%实现模糊查询。删除和修改按钮同理把 SQL 换成DELETE或UPDATE主键用StudentNo定位即可。注意如果运行时报“System.Data.SqlClient 未找到”检查项目是否引用了System.Data程序集。WinForms 项目默认会引用但有时新建项目模板会漏。5. 课设避坑与排查那些让报告书卡住的常见问题5.1 连接失败从错误信息反推原因现象C# 程序运行时报“在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误”。原因通常是三类实例名写错、TCP/IP 未启用、防火墙拦截。解决先在 SSMS 里确认能连再把 SSMS 里用的服务器名原样复制到连接字符串检查 SQL Server 配置管理器里 TCP/IP 状态临时关闭防火墙测试。5.2 中文乱码字段类型选错现象插入中文姓名后数据库里显示问号或乱码。原因建表时用了VARCHAR而不是NVARCHAR。解决把字段类型改为NVARCHAR插入时字符串前加N前缀如N张三。已经建的表可以用ALTER TABLE改列类型但要注意数据转换。5.3 外键冲突插入顺序和删除顺序现象插入选课记录时报“INSERT 语句与 FOREIGN KEY 约束冲突”。原因选课表里的学号或课程号在对应主表里不存在。解决先插主表数据再插关联表。删除时反过来先删关联表再删主表或者建表时设置ON DELETE CASCADE课设里不推荐容易误删。5.4 Visual Studio 启动报 ServiceHub 错误现象打开 VS 2022 时报“由于出现错误无法启动 Visual Studio。Microsoft.ServiceHub.Client.Controller”。原因VS 的缓存或组件损坏。解决用 VS 安装程序的“修复”功能或者删除%LocalAppData%\Microsoft\VisualStudio\下对应版本的缓存文件夹后重启。这个错误和数据库无关但课设期间遇到会直接打断进度。5.5 报告书里 SQL 代码和实际库不一致现象报告书里写的表结构和实际建的库对不上答辩时被问住。原因先写报告后建库或者建库后改了字段没同步改报告。解决以实际能跑的建库脚本为准报告书里的“物理结构设计”章节直接粘贴最终版建表 SQL并截图 SSMS 里的表结构作为佐证。6. 让课设报告书加分三个可验证的进阶技巧第一个技巧是把“查询功能”做出层次。基础课设只做单表查询加分做法是至少写一个三表关联查询加一个聚合查询。比如“查询每门课程的平均分、最高分、选课人数”SQL 如下SELECT c.CourseName, COUNT(sc.StudentNo) AS 选课人数, AVG(sc.Score) AS 平均分, MAX(sc.Score) AS 最高分 FROM Course c LEFT JOIN SC sc ON c.CourseNo sc.CourseNo GROUP BY c.CourseName ORDER BY 平均分 DESC;这段查询用LEFT JOIN保证没有选课的课程也显示人数为 0GROUP BY按课程分组聚合函数算统计值。报告书里可以配一张运行结果截图比纯文字有说服力。第二个技巧是给 C# 界面加一个“导出 Excel”或“导出 CSV”按钮。课设不要求但做了就是亮点。最简单的做法是把 DataGridView 的数据用StreamWriter写成 CSVprivate void btnExport_Click(object sender, EventArgs e) { using (StreamWriter sw new StreamWriter(导出数据.csv, false, Encoding.UTF8)) { // 写表头 for (int i 0; i dgvStudent.Columns.Count; i) sw.Write(dgvStudent.Columns[i].HeaderText (i dgvStudent.Columns.Count - 1 ? : ,)); sw.WriteLine(); // 写数据行 foreach (DataGridViewRow row in dgvStudent.Rows) { if (row.IsNewRow) continue; for (int i 0; i dgvStudent.Columns.Count; i) sw.Write(row.Cells[i].Value (i dgvStudent.Columns.Count - 1 ? : ,)); sw.WriteLine(); } } MessageBox.Show(导出完成); }注意Encoding.UTF8保证中文不乱码false表示覆盖写入。这个功能在报告书里可以写成“数据导出模块”属于超出基本要求的加分项。第三个技巧是报告书里加一节“测试与验证”用表格列出测试用例输入什么、预期输出什么、实际结果、是否通过。比如“输入不存在的学号查询预期返回空实际返回空通过”。这一节最能体现工程思维答辩老师通常很吃这一套。我自己做课设和带人做课设的血泪经验是别在报告书排版上花太多时间先把数据库跑通、C# 能增删改查、截图齐全报告书自然有东西写。环境问题占掉的时间往往比写代码还多所以装 SQL Server 和 Visual Studio 那一步一定要按顺序、按验证步骤走别跳。希望帮到你。本文还有配套的精品资源点击获取
上一篇/下一篇内容由系统自动关联 返回资讯列表 →