ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VB.NET+SQL Server BS架构订餐系统:从环境搭建到部署避坑

VB.NET+SQL Server BS架构订餐系统:从环境搭建到部署避坑 简介基于VB与VB.NET结合SQL Server开发的Web订餐系统采用B/S架构面向需要完成课程设计、毕业设计或餐饮信息化项目的计算机专业学生与开发人员涵盖了菜品管理、订单处理、餐台管理等典型模块。项目源码经过完整测试校正可保证运行。资源提供完整可运行的源码与配套文档帮助理解订餐系统的前后端交互、数据库设计及核心业务逻辑。压缩包共75个文件以21个vb源代码、18个aspx页面及19个resx资源文件为主辅以数据库文件mdf/ldf、数据库备份bak、项目解决方案sln和说明文档docx/doc并带有答辩PPT模板整体约830KB结构清晰便于按模块查阅。已有388人学习下载适合在VS环境中直接打开项目进行部署调试也可参照文档快速掌握订单处理、菜品管理等模块的实现思路是设计类项目实践与答辩准备的可选参考资料。1. 这个 zip 包到底是什么VB.NET SQL Server 的 BS 架构订餐系统一个名为“基于 VBVB.NETSQL Server 的 web 订餐系统设计与实现”的源码包第一眼看上去并不惊艳BS 架构的老组合、.aspx 页面、SQL Server 库脚本连前端都看不到框架的影子。但拆开之后你会发现这套代码把订餐系统的完整骨架都搭好了——用户注册登录、菜品浏览、购物车、订单提交、后台菜品与订单管理通通是传统 Web 应用的标准形态。对正在做毕设或者刚转进 .NET 的同学来说它的价值在于VB.NET 写业务逻辑、SQL Server 做持久化、浏览器做前端三者之间的协作关系非常直白几乎没有黑匣子。它适合两类人一类是毕业设计需要快速交付并答辩的人另一类是想把 BS 架构从数据库到浏览器串成一条线的初学者。下面按我自己落地这类老项目的路径来写从环境配置、源码结构、数据库设计一直讲到部署避坑。2. 跑通前的三件套Visual Studio、SQL Server 与 IIS 的版本搭配在跑这套源码之前先把“环境”想清楚。老毕设项目最怕的不是代码而是一台机器上堆了三个相互打架的工具链。一个订餐系统从源码到可访问真正需要的是三样东西写页面和编译的 Visual Studio、存数据的 SQL Server、让浏览器访问到的 Web 服务器IIS 或 IIS Express。版本搭配的核心原则不要拿最新的 .NET 环境去强行打开老 Web Forms 项目也不要装一堆用不上的 SQL Server 组件。2.1 选型为什么说 VB.NET 的 Web 基本等于 Web FormsVB.NET 只是语言真正让它跑在浏览器里的是 ASP.NET Web Forms 或 ASP.NET MVC 这类框架。绝大多数以“VB.NET Web BS 架构”为卖点的毕设源码包使用的是 Web Forms每个页面是一个 .aspx逻辑写在同名的 .aspx.vb 里用 Visual Studio 打开 .sln 就能直接改。要识别也不难一个文件夹下同时出现 .aspx 和 .aspx.vb 成对的页面文件基本就是 Web Forms 项目公共代码常放在 App_Code 目录或一个名为 Common、Helper 的类库里。先别急着双击 .sln用命令行确认一下项目结构更稳。老项目的解决方案文件可能嵌套在两层目录里直接双击往往打开一个空壳。# 在解压出的源码包根目录里先确认解决方案文件是否存在 find . -maxdepth 2 -name *.sln -o -name *.vbproj | head -20 # 如果看得到 .aspx.vb 成对出现说明这是一个 Web Forms 模型的项目 find . -maxdepth 3 -name *.aspx.vb | head -10这两条命令的作用是快速定位主项目和页面模型。-maxdepth 2限制在最深两层的目录里找 .sln / .vbproj避免扫描 Node_Modules 之类的大目录head -20只取前 20 条防止文件过多刷屏。看到 .vbproj 后再打开这个 .vbproj 文件里面有一个TargetFrameworkVersion标签值是 v2.0 到 v4.8 之间就说明是 .NET Framework 老项目Visual Studio 2017/2019/2022 都能打开只是打开前要勾上“ASP.NET 和 Web 开发”工作负载和对应的 .NET Framework 目标包。2.2 SQL Server 安装引擎、SSMS 与版本兼容的三个选择安装 SQL Server 时老教程喜欢把 Analysis Services、Reporting Services 一起勾上对订餐系统毫无意义纯占磁盘和内存。安装中心的功能选择里只需要勾选 Database Engine ServicesSSMS 单独装一个最新版即可。装完 SQL Server 后我一般会顺手做两件事把“最大服务器内存”限制在 2 GB 以内避免开发机内存被 SQL Server 吃满确认实例名和端口默认实例用localhost或.就能连命名实例则要写成主机名\实例名的格式。版本兼容这条很多人被“SQL Server 2008 的文件能不能在 2019 上跑”这事绕晕。数据库文件的兼容规则是新版本引擎可以附加旧版本的数据库文件反过来不行。也就是说2008 或 2012 时代写的 .sql 脚本和 .mdf 文件放到 2019/2022 上执行基本无障碍如果你非要装一个 2008 实例和 2022 实例做共存实验实例名要分开、端口要错开SSMS 2022 连 2008 实例时部分管理功能受限一般不建议这么折腾。安装完成后用 sqlcmd 或者 SSMS 验证一下引擎能通# 用 sqlcmd 检查 SQL Server 版本-S 指定实例-E 表示 Windows 认证 sqlcmd -S .\SQLEXPRESS -E -Q SELECT VERSION # 如果本机没有 sqlcmd直接打开 SSMS服务器名填 . 或 .\SQLEXPRESS用 Windows 认证登录.\SQLEXPRESS是默认安装最常出现的实例名-Q后面的 SQL 语句直接执行完就退出。这一步只做连通性验证返回一串版本信息就说明引擎正常。如果连不上先检查SQL Server 配置管理器 - SQL Server 网络配置 - 实例协议里的 TCP/IP 是否启用这是最容易被漏掉的开关。2.3 打开源码包的最小流程先建库、再改连接串、最后按 F5这类 zip 包常见结构是“源码 文档 数据库脚本”文档目录里通常是需求分析、概要设计、数据库设计说明答辩时主要看这些。我的习惯是先找数据库脚本再碰代码。顺序错了就会出现“项目打开了、一登录就报数据库不存在”的情况。推荐的落地顺序是解压到短路径 → 执行数据库脚本或附加 MDF → 改 Web.config 连接字符串 → 用 VS 打开 .sln → F5 跑起来。解压这一步特别提醒路径不要带中文和超长目录老项目对中文路径的容忍度很低C:\code\order这种短路径最稳。# Windows 10 自带 tar解压到短路径示例命令以你的实际文件名为准 mkdir C:\code tar -xf D:\downloads\订餐系统.zip -C C:\code # 查看数据库脚本是否存在决定用脚本建库还是附加 MDF ls C:\code\order\Database\*.sqltar -xf会把压缩包解开到C:\code下目录名保持压缩包内的结构。后续手动执行 .sql 时直接用 SSMS 打开脚本文件执行即可如果只有 .mdf/.ldf则用 SSMS 里的“附加数据库”功能。这两条路会在第五章的避坑部分仔细讲这里先确认做法即可。3. 拆开代码看架构Web Forms 页面、业务类与 SQL Server 表如何各司其职这一章解决“代码拿到手看不懂怎么下手改”的问题。一个 BS 架构的订餐系统再花哨也是三个层次浏览器里的页面、中间的业务类、底下的 SQL Server 库。看代码时先按目录分层再把表结构抠出来就能知道从哪里改起。前端开发层面的改动只碰 .aspx业务逻辑改动看 .aspx.vb数据结构改动看数据库脚本这个边界画清爽了后面几个小时的工作量就定了。3.1 典型源码包的目录结构前端页面、公共代码与数据库脚本先把目录树映射成一张表格对着表格找文件比逐个点开高效得多。这里的目录名是这类毕设包的常见命名不一定和你手里的包完全一致但作用一一对应。目录或文件所属层职责改动时的注意点*.aspx与*.aspx.vb页面层展示 HTML 与事件响应逻辑改界面样式不动 .vb改按钮逻辑不动 .aspxApp_Code/或Common/下的.vb公共类层数据库连接、通用函数改动会影响所有页面先看清楚被谁引用Admin/目录管理端页面后台维护菜品、处理订单与用户端页面独立不要混淆Database/*.sql或*.bak数据库层建表、初始数据、存储过程数据结构以这个目录为准文档目录文档层需求/设计/数据库说明答辩讲解时按这几份文档串这个分层最直观的价值是你想把菜品卡片改成带图片的样式只需要改前端的 .aspx 文件加上img标签数据字段早已在 SQL Server 的 Dishes 表里。想加“推荐菜品”的功能才需要去碰 .aspx.vb 里的查询逻辑和数据库脚本里的字段。这种前后分离不是真正的 MVC但足够直白单人做毕设时改起来效率很高。3.2 订餐系统的核心表设计用户、菜品、订单与订单明细为了讲清楚“数据从哪来”这里给一份常见的订餐系统表设计。数据库脚本是这套系统的地基大部分人改代码改到一半翻车都是因为没搞明白订单主表和明细表的关系。以下 SQL 是按我自己的落地经验整理的最小版本具体源码包里字段名可能是 UserId、UserName 或 Pwd 这种缩写很正常遇到时多看两处再动手。-- 用户表订餐系统的账号体系 CREATE TABLE Users ( UserID INT IDENTITY(1,1) PRIMARY KEY, UserName NVARCHAR(50) NOT NULL UNIQUE, UserPwd NVARCHAR(50) NOT NULL, -- 毕设常用明文或简单哈希生产环境必须改 RealName NVARCHAR(20), Phone NVARCHAR(20), Address NVARCHAR(200), RegTime DATETIME DEFAULT GETDATE() ); -- 菜品分类表前台导航和后台管理共用 CREATE TABLE Categories ( CategoryID INT IDENTITY(1,1) PRIMARY KEY, CategoryName NVARCHAR(50) NOT NULL, SortOrder INT DEFAULT 0 ); -- 菜品表一份菜品归属一个分类 CREATE TABLE Dishes ( DishID INT IDENTITY(1,1) PRIMARY KEY, CategoryID INT NOT NULL REFERENCES Categories(CategoryID), DishName NVARCHAR(50) NOT NULL, Price DECIMAL(10,2) NOT NULL, Photo NVARCHAR(200), -- 存相对路径比如 /Upload/xxx.jpg Description NVARCHAR(500), IsAvailable BIT DEFAULT 1 -- 1 上架0 下架 ); -- 订单主表一个订单一条记录 CREATE TABLE Orders ( OrderID INT IDENTITY(1,1) PRIMARY KEY, OrderNo NVARCHAR(30) NOT NULL, -- 业务单号方便人工核对 UserID INT NOT NULL REFERENCES Users(UserID), TotalAmount DECIMAL(10,2) NOT NULL DEFAULT 0, Status INT NOT NULL DEFAULT 0, -- 0 待确认 1 已确认 2 已取消 3 已完成 CreateTime DATETIME DEFAULT GETDATE() ); -- 订单明细表一个订单包含多个菜品逐行记录 CREATE TABLE OrderItems ( ItemID INT IDENTITY(1,1) PRIMARY KEY, OrderID INT NOT NULL REFERENCES Orders(OrderID), DishID INT NOT NULL REFERENCES Dishes(DishID), DishName NVARCHAR(50), -- 菜品名快照 UnitPrice DECIMAL(10,2), -- 单价快照 Quantity INT NOT NULL DEFAULT 1, SubTotal AS (UnitPrice * Quantity) -- 计算列省掉冗余插入 );把 Orders 和 OrderItems 拆成两张表是订单系统的标准建模方式。明细表里故意冗余保存 DishName 和 UnitPrice 两个快照是为了防止菜品后来改了名、调了价历史订单跟着变。比如用户上个月点了一份“鱼香肉丝”价格 18 元今天菜品涨到 20 元如果明细表不存快照翻旧订单时金额就出错了。SubTotal 用计算列自动得出小计INSERT 时不用手动写这是 SQL Server 里省事的写法。答辩时把这个快照原理讲明白比背十页设计文档都管用。3.3 用户端到管理端的请求流转Session、购物车与订单状态看明白了表结构再看代码里的数据流转就顺了。登录成功时把 UserID 写进 Session(UserId)每个页面 Page_Load 里检查这个值未登录就 Redirect 到 Login.aspx。购物车更简单老系统常见做法是用 Session 装一个 Dictionary(Of Integer, Integer)Key 是菜品 IDValue 是数量。把菜加进购物车不碰数据库只有点“提交订单”时才把 Session 购物车里所有条目写进 SQL Server 的 Orders 和 OrderItems 表。管理端那边是另一条线管理员登录后台看到订单列表通过下拉框或按钮更新 Status 字段。更新订单状态时最容易犯的错是把界面上的中文文本直接赋给 int 字段报“将 varchar 转换为 int 失败”。一定要先转换再入库下面是管理端更新订单状态的典型写法 管理端根据订单号更新状态确认、取消或完成 Dim sql As String UPDATE Orders SET Status Status WHERE OrderNo OrderNo Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings(OrderDb).ConnectionString) conn.Open() Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue(Status, Convert.ToInt32(statusDDL.SelectedValue)) cmd.Parameters.AddWithValue(OrderNo, orderNo.Text.Trim()) cmd.ExecuteNonQuery() End Using End UsingConvert.ToInt32(statusDDL.SelectedValue)把下拉框选中的字符串转成整数Status 字段是 int 类型下拉框的值应该在设计时就写成0/1/2/3显示文本才是“待确认/已确认/已取消/已完成”。这里一定要用参数化查询不要用字符串拼接既是防 SQL 注入也是避免菜品名里出现单引号时直接炸掉。ExecuteNonQuery()不返回数据行只返回受影响行数适合 UPDATE/DELETE 这类操作。4. 从数据库到页面连接字符串与三条必调参数让订餐流程完整跑通数据访问层是整个系统的血管。我拿到项目源码后习惯先改连接字符串再做别的因为订餐流程 80% 的报错都出在这一段。连接字符串写在 Web.config 的 connectionStrings 节点里老项目一般长这样connectionStrings add nameOrderDb connectionStringData Source.\SQLEXPRESS;Initial CatalogOrderDB;User IDsa;Password你的密码;Connect Timeout15;EncryptFalse;TrustServerCertificateTrue;Application NameOrderSystem providerNameSystem.Data.SqlClient / /connectionStrings这段配置里的Data Source指定 SQL Server 实例位置Initial Catalog是数据库名User ID和Password对应 SQL Server 登录账号。如果走 Windows 认证把User ID和Password换成Integrated SecuritySSPI即可。要说明的是providerName必须是System.Data.SqlClient老 Web Forms 项目的 SqlConnection 默认走这个驱动写别的连不上。4.1 两种登录身份怎么选BS 架构下尤其重要Windows 认证Integrated SecuritySSPI在开发机上最省事因为当前登录用户就是 SQL Server 认可的账号不需要额外配密码。但部署到 IIS 后就麻烦了IIS 站点默认跑在 Network Service 或 ApplicationPoolIdentity 账号下这个账号不一定有 SQL Server 的登录权限你要么去 SQL Server 里给这个账号授权要么改用 SQL Server 认证。所以我一般建议在 BS 架构项目里直接用 SQL Server 认证也就是 User ID / Password 方案连接串在开发机和服务器上保持一致少踩一个环境的坑。前提是 SQL Server 实例必须开启混合认证模式。安装时默认可能是 Windows 认证模式就算连接字符串写得没错sa 也永远登录失败。这个问题在第五章避坑部分会展开这里先记住连接串配好了还报“用户 sa 登录失败”第一反应不是改连接串而是去 SSMS 里检查认证模式。4.2 三条必调参数Connect Timeout、Encrypt、Application Name连接字符串里真正值得手工调整的参数只有三个其余保持默认。先看一张参数说明表参数默认行为推荐值适用场景Connect Timeout15 秒10~15内网开发足够公网环境可调到 30Encrypt随驱动版本而定False开发环境、内网部署TrustServerCertificateFalseTrue连接时报证书链不受信任时Application Name无OrderSystem区分 SQL Server 里来自不同应用的连接Connect Timeout是建立连接的最大等待秒数不是查询耗时一般内网 15 秒足够。EncryptFalse和TrustServerCertificateTrue是近两年最容易踩的两个点SQL Server 2016 之后的版本默认启用更严格的 TLS 加密行为而老系统用的 .NET Framework SqlClient 在握手阶段拿不到可信任的证书就抛错典型报错是“证书链是由不受信任的颁发机构颁发的”或者 “[08001] SSL 提供程序:客户端无法建立连接”。显式把这两个参数写进连接串直接绕过握手阶段的证书校验开发机和内网部署都这么干。注意 TrustServerCertificateTrue 只适合开发环境不要原样搬上公网生产环境。Application Name纯粹是给排查用的SQL Server 的活动监视器里能看到每个连接来自哪个应用调试时一眼认出自己写的程序强烈建议加上。4.3 一次完整订餐流程的联调注册、加购、下单与后台确认环境配好后按一条完整业务线去验证而不是东点一个西点一个。我的验证顺序是注册新用户 → 登录 → 浏览菜品 → 加两道菜进购物车 → 提交订单 → 去 Admin 后台把订单状态从“待确认”改成“已确认”。这条链路能走通说明页面、业务类、SQL Server 表结构全部打通了。登录页面是最先被验证的代码它的写法决定了后面所有页面的风格 登录验证参数化查询 只取第一行第一列 Dim sql As String SELECT UserID FROM Users WHERE UserNameu AND UserPwdp Using conn As New SqlConnection(ConfigurationManager.ConnectionStrings(OrderDb).ConnectionString) conn.Open() Using cmd As New SqlCommand(sql, conn) cmd.Parameters.AddWithValue(u, username.Text.Trim()) cmd.Parameters.AddWithValue(p, pwd.Text.Trim()) Dim result As Object cmd.ExecuteScalar() If result IsNot Nothing Then Session(UserId) Convert.ToInt32(result) Response.Redirect(MenuList.aspx) Else labMsg.Text 用户名或密码错误 End If End Using End UsingExecuteScalar()只取结果集第一行第一列用来拿 UserID 这种单值最高效。.Trim()去掉用户名两端空格避免用户手滑输入了空格导致永远匹配不上。登录成功后把 UserID 转成整数放进 Session后续页面要靠 Session 判断登录态。下一环的下单操作是整套系统里事务性最强的代码前面第三章已经给了事务框架这里不再重复。要特意强调的是订餐流程里“把 Session 购物车落库”这一步必须放在一个事务里因为要同时插 Orders 主表和 OrderItems 明细表任何一条明细插失败整张订单都要回滚不能留下“订单主表有记录、明细为空”的脏数据。5. 避坑VB.NET Web 订餐系统部署中最常见的五个翻车点这一章不讲奇技淫巧只挑五个翻车概率最高的点全部按“现象 → 原因 → 解决”的顺序写方便你对着现象找答案。每一条都是我在老 .NET 项目里反复撞过的墙。5.1 附加数据库报错SQL Server 2008 的 MDF 挂不上 2019现象用 SSMS 附加下载到的 .mdf 文件时报“无法打开物理文件…操作系统错误 5(拒绝访问)”或者附加完成后页面一查询就提示“文件已在使用”或“无法访问”。原因很多毕设包的 .mdf 是从 SQL Server 2008/2012 里分离出来的文件本身能被高版本引擎打开真正的问题是权限——“附加”操作需要 SQL Server 服务账号对 .mdf 所在的目录有读写权限。而 zip 解压出来的文件通常躺在下载目录或用户目录SQL Server 服务账号默认 NETWORK SERVICE 或 MSSQLSERVER 账号根本进不去那个路径。解决把整个 Database 目录里的 .mdf 和 .ldf 一起复制到 SQL Server 默认数据目录比如C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA下再从那个路径附加。还有一种更省事的路直接用 SSMS 打开源码包里的 .sql 脚本执行建库绕开 MDF 文件权限问题。注意 .mdf 和 .ldf 必须放一起只附加主文件不打日志文件也会报错。提示如果源码包里 .sql 和 .mdf 同时存在优先用 .sql 建库。脚本建库能确保表结构和初始数据都在一次执行里完成比附加文件少一半权限问题。5.2 连接报 SSL 错误08001 证书链或不受信任的颁发机构现象程序运行时抛异常日志里出现类似[08001] [Microsoft][ODBC Driver 17 for SQL Server] SSL 提供程序: 证书链是由不受信任的颁发机构颁发的或者 .NET 报“A connection was successfully established with the server, but then an error occurred during the pre-login handshake”。更早版本的驱动报的可能是“服务器不支持加密”。原因SQL Server 2016 之后的版本默认行为更严格会要求客户端验证服务器证书。而老项目自带的 .NET Framework SqlClient 或者旧版 ODBC 驱动在 TLS 握手阶段拿到的自签名证书不被信任连接在预登录阶段就被掐断。这不是服务器装坏了是“新库 老客户端”的版本摩擦。解决在连接字符串里显式加上EncryptFalse;TrustServerCertificateTrue跳过这一步的证书校验。对内网开发和毕设部署来说这是最直接的做法不要去服务器上部署正式证书那属于生产环境的工程问题。改完连接串后重启一下站点进程让配置重新加载。5.3 sa 登录失败混合认证未启用现象SSMS 能用 Windows 认证连上 SQL Server但程序里用User IDsa;Passwordxxx登录时报“用户 sa 登录失败。原因: 该与 SQL Server 相关联的登录名或密码无效或该登录名未获准连接到 SQL Server”。原因SQL Server 安装时选择了“Windows 认证模式”数据库引擎只接受 Windows 账号。虽然安装流程里有“混合模式”这个选项毕设包里的安装教程通常会跳过导致 sa 账号根本没启用或者密码为空被安全策略锁住。解决用 Windows 认证在 SSMS 里登录右键服务器实例 → 属性 → 安全性 → 选择“SQL Server 和 Windows 认证模式”确定后重启 SQL Server 服务。然后展开“安全性 → 登录名 → sa”在 sa 属性里设置一个强密码并在“状态”选项卡里把“登录”改为“已启用”。重启服务后再用连接串试一次。5.4 部署到 IIS 后报 500.19应用程序池的 CLR 版本不匹配现象项目在 Visual Studio 里按 F5 能正常访问发布到 IIS 后访问 .aspx 页面报 500.19 错误错误信息指向applicationHost.config的某个配置段或者干脆显示 403.14 目录列表被拒绝。页面不加载但静态图片等文件能打开。原因IIS 的应用程序池默认使用 .NET CLR v4.0而老 Web Forms 项目如果目标框架是 .NET 2.0/3.5注册的映射走的是 v2.0 的托管管道两者对不上请求在进入页面之前就被 IIS 拦下。另一种情况是网站目录用的应用程序池身份ApplicationPoolIdentity对源码目录没有读权限导致 IIS 无法读取配置文件。解决在 IIS 管理器的“应用程序池”里新建一个池.NET CLR 版本按项目实际选老项目选 v2.04.x 选 v4.0托管管道模式选“集成”即可。再把网站绑定到这个新池给网站根目录添加“IIS_IUSRS”和“Network Service”的读取权限。最后在“控制面板 → 程序 → 启用或关闭 Windows 功能”里确认“ASP.NET”相关功能已勾选很多 500.19 是服务器压根没装 ASP.NET 模块。5.5 连接超时 08001TCP/IP 未启用或实例名指向错现象程序启动时连接超时报[08001] 在建立与服务器的连接时出错。在连接到 SQL Server 时默认设置 SQL Server 不允许远程连接或者 “SQL Server 网络接口: 指向的服务器不是指定的实例”。SSMS 却能正常连上同一个实例。原因SQL Server 默认安装后TCP/IP 协议可能是禁用状态SSMS 通过共享内存或命名管道能连上但程序走 TCP 走不通于是超时。还有一种常见情况是连接字符串的Data Source写成了localhost而实际安装的是命名实例比如.\SQLEXPRESS解析不到正确端口。解决打开SQL Server 配置管理器→SQL Server 网络配置→ 对应实例协议找到 TCP/IP右键启用再重启 SQL Server 服务。然后把连接字符串的Data Source改成安装时确定的实例名格式比如.\SQLEXPRESS或主机名\实例名。如果还是超时在命令行里用telnet 127.0.0.1 1433测一下端口通不通不通就查 Windows 防火墙是否放行了 1433 端口。6. 把毕设代码改造成自己的项目三个升级点与一个验证技巧老源码能跑通只是及格线答辩时能讲出“我改了什么”才算自己的东西。我一般建议从三个风险低、效果明显的点里挑一个去做改完再配合一个验证动作整套系统就站得住了。第一个升级点是菜品图片上传。原来的菜谱页多半是纯文本列表图片字段是空的或者写死了一个路径。改造思路是后台菜品管理页面加一个 FileUpload 控件上传时用 GUID 重命名文件保存到站点的 Upload 目录再把相对路径写进 Dishes 表的 Photo 字段。前台列表页用img src%# Eval(Photo) %渲染即可。这里最容易忽略的是文件名安全一定要用 GUID 重命名不能沿用用户上传的原文件名否则别人可以传一个带路径的 .asp 文件上去变成 WebShell。第二个升级点是导出订单报表。给 Admin 后台加一个“按日期导出订单明细”的按钮。如果要导出 Excel可以引用 Microsoft.Office.Interop.Excel但那个引用在服务端部署经常出权限问题。更稳的做法是直接生成 Excel 能打开的 XML 表格或 CSV 文件不依赖 Office 环境。我自己的习惯是输出 CSV再让浏览器下载代码量少也不怕服务端没装 Office。第三个升级点是统计报表页面。利用 SQL Server 的分组查询把每日订单量和营业额算出来在后台用一个 Chart 控件或简单 HTML 表格展示。核心 SQL 就是SELECT CONVERT(varchar(10), CreateTime, 120) AS Day, COUNT(*) AS OrderCount, SUM(TotalAmount) AS Amount FROM Orders GROUP BY CONVERT(varchar(10), CreateTime, 120)这一条查询同时用到了类型转换、聚合函数和分组单拎出来讲就是一次很好的答辩亮点。改造做完之后用“第二台设备访问”来验证 BS 架构是否真正成型。把站点发布到 IIS 后在命令行里跑ipconfig查到本机局域网 IP然后用手机或另一台电脑的浏览器直接访问http://本机IP:端口/Login.aspx。如果打不开先看 Windows 防火墙有没有放行对应端口再看 IIS 站点绑定里的 IP 是“全部未分配”还是绑死了本机回环地址。这一步通了你就能理直气壮地说这套系统是真正的浏览器/服务器架构不是只能在自己电脑上跑的玩具。最后说一个我自己的习惯拿到任何一套源码先花二十分钟把数据库脚本和连接字符串找到把数据层跑通之后再碰页面这样后面所有报错都能判断是从哪一层来的。订餐系统的坑大多集中在数据访问那一段把连接串和事务逻辑吃透整套代码就跑得明白了。希望帮到你。本文还有配套的精品资源点击获取
返回列表