为您创建一个完整的 ASP.NET MVC 应用程序,演示如何通过点击按钮连接 MySQL 数据库并查询数据表。

完整实现步骤

1. 首先安装必要的 NuGet 包

在项目中安装以下 NuGet 包:

  • MySql.Data

  • Dapper(可选,用于简化数据访问)

Install-Package MySql.Data
Install-Package Dapper

2. 配置数据库连接字符串

在 Web.config 文件中添加连接字符串:

<configuration><connectionStrings><add name="MySqlConnection" connectionString="Server=localhost;Database=your_database;Uid=username;Pwd=password;" providerName="MySql.Data.MySqlClient"/></connectionStrings>
</configuration>

3. 创建数据模型

创建 Models/Product.cs 类:

namespace MvcMySqlApp.Models
{public class Product{public int Id { get; set; }public string Name { get; set; }public string Description { get; set; }public decimal Price { get; set; }public int Stock { get; set; }public string Category { get; set; }public DateTime CreatedAt { get; set; }}
}

4. 创建数据访问层

创建 Data/ProductRepository.cs 类:

using System.Collections.Generic;
using System.Data;
using MySql.Data.MySqlClient;
using MvcMySqlApp.Models;
using System.Configuration;
using Dapper;namespace MvcMySqlApp.Data
{public class ProductRepository{private readonly string connectionString;public ProductRepository(){connectionString = ConfigurationManager.ConnectionStrings["MySqlConnection"].ConnectionString;}public IDbConnection GetConnection(){return new MySqlConnection(connectionString);}// 使用 ADO.NET 方式查询public List<Product> GetProductsWithAdapter(){var products = new List<Product>();using (var connection = new MySqlConnection(connectionString)){connection.Open();// 使用 MySqlDataAdaptervar adapter = new MySqlDataAdapter("SELECT * FROM Products", connection);var dataSet = new DataSet();adapter.Fill(dataSet);foreach (DataRow row in dataSet.Tables[0].Rows){products.Add(new Product{Id = Convert.ToInt32(row["Id"]),Name = row["Name"].ToString(),Description = row["Description"].ToString(),Price = Convert.ToDecimal(row["Price"]),Stock = Convert.ToInt32(row["Stock"]),Category = row["Category"].ToString(),CreatedAt = Convert.ToDateTime(row["CreatedAt"])});}}return products;}// 使用 Dapper 简化查询(可选)public IEnumerable<Product> GetProductsWithDapper(){using (var connection = GetConnection()){connection.Open();return connection.Query<Product>("SELECT * FROM Products");}}// 添加其他数据库操作方法...}
}

5. 创建控制器

创建 Controllers/ProductsController.cs

using System.Web.Mvc;
using MvcMySqlApp.Data;
using MvcMySqlApp.Models;
using System.Collections.Generic;namespace MvcMySqlApp.Controllers
{public class ProductsController : Controller{private readonly ProductRepository _repository;public ProductsController(){_repository = new ProductRepository();}// GET: Productspublic ActionResult Index(){return View();}// AJAX 动作:获取产品数据[HttpPost]public ActionResult GetProducts(){try{// 使用 ADO.NET DataAdapter 查询数据List<Product> products = _repository.GetProductsWithAdapter();return Json(new { success = true, data = products });}catch (System.Exception ex){return Json(new { success = false, message = ex.Message });}}// 其他动作方法...}
}

6. 创建视图

创建 Views/Products/Index.cshtml

@{ViewBag.Title = "产品列表";
}<div class="container mt-4"><h2>产品列表</h2><p>点击按钮从MySQL数据库获取产品数据</p><div class="row"><div class="col-md-12"><button id="btnGetProducts" class="btn btn-primary mb-3"><i class="fas fa-database"></i> 获取产品数据</button><div id="loading" class="alert alert-info" style="display: none;"><i class="fas fa-spinner fa-spin"></i> 正在查询数据库,请稍候...</div><div id="error" class="alert alert-danger" style="display: none;"></div><table id="productsTable" class="table table-striped table-bordered" style="display: none;"><thead class="thead-dark"><tr><th>ID</th><th>名称</th><th>描述</th><th>价格</th><th>库存</th><th>分类</th><th>创建时间</th></tr></thead><tbody><!-- 数据将通过JavaScript动态填充 --></tbody></table></div></div>
</div>@section Scripts {<script>$(document).ready(function() {$('#btnGetProducts').click(function() {// 显示加载提示$('#loading').show();$('#error').hide();$('#productsTable').hide();// 发送AJAX请求到服务器$.ajax({url: '@Url.Action("GetProducts", "Products")',type: 'POST',dataType: 'json',success: function(response) {$('#loading').hide();if (response.success) {// 清空表格$('#productsTable tbody').empty();// 填充数据$.each(response.data, function(index, product) {var row = '<tr>' +'<td>' + product.Id + '</td>' +'<td>' + product.Name + '</td>' +'<td>' + (product.Description || '') + '</td>' +'<td>¥' + product.Price.toFixed(2) + '</td>' +'<td>' + product.Stock + '</td>' +'<td>' + product.Category + '</td>' +'<td>' + new Date(product.CreatedAt).toLocaleDateString() + '</td>' +'</tr>';$('#productsTable tbody').append(row);});// 显示表格$('#productsTable').show();} else {$('#error').text('错误: ' + response.message).show();}},error: function(xhr, status, error) {$('#loading').hide();$('#error').text('请求错误: ' + error).show();}});});});</script>
}

7. 添加布局和样式

确保 Views/Shared/_Layout.cshtml 包含 Bootstrap 和 Font Awesome:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>@ViewBag.Title - MySQL MVC 应用</title>@Styles.Render("~/Content/css")@Scripts.Render("~/bundles/modernizr")<!-- 添加 Bootstrap 和 Font Awesome --><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
</head>
<body><nav class="navbar navbar-expand-lg navbar-dark bg-dark"><div class="container">@Html.ActionLink("MySQL MVC 应用", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbarNav"><ul class="navbar-nav"><li class="nav-item">@Html.ActionLink("首页", "Index", "Home", null, new { @class = "nav-link" })</li><li class="nav-item">@Html.ActionLink("产品", "Index", "Products", null, new { @class = "nav-link" })</li></ul></div></div></nav><div class="container body-content">@RenderBody()<hr /><footer><p>&copy; @DateTime.Now.Year - MySQL MVC 应用</p></footer></div>@Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/bootstrap")<!-- 添加 Bootstrap JS --><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>@RenderSection("scripts", required: false)
</body>
</html>

8. 创建数据库表

在MySQL中创建示例表:

CREATE DATABASE IF NOT EXISTS ProductDB;
USE ProductDB;CREATE TABLE Products (Id INT AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(100) NOT NULL,Description TEXT,Price DECIMAL(10, 2) NOT NULL,Stock INT NOT NULL DEFAULT 0,Category VARCHAR(50),CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
);-- 插入示例数据
INSERT INTO Products (Name, Description, Price, Stock, Category) VALUES
('智能手机', '最新款智能手机', 1999.99, 50, '电子产品'),
('笔记本电脑', '高性能笔记本电脑', 4999.99, 30, '电子产品'),
('平板电脑', '轻薄便携平板', 2599.99, 25, '电子产品'),
('智能手表', '健康监测智能手表', 899.99, 40, '电子产品'),
('无线耳机', '主动降噪无线耳机', 699.99, 60, '电子产品');

功能说明

这个应用程序实现了以下功能:

  1. 数据库连接:使用MySQL连接字符串配置数据库连接

  2. 数据访问层:使用MySqlDataAdapter执行查询并填充DataSet

  3. 控制器逻辑:处理按钮点击事件,调用数据访问方法

  4. AJAX交互:使用jQuery AJAX实现无刷新数据加载

  5. 响应式UI:使用Bootstrap创建美观的用户界面

  6. 错误处理:包含适当的异常处理和用户反馈

使用说明

  1. 配置MySQL数据库连接字符串

  2. 创建示例数据库和表

  3. 运行应用程序

  4. 访问 /Products 页面

  5. 点击"获取产品数据"按钮

  6. 查看从数据库加载的产品信息

扩展建议

  1. 添加分页功能:对于大量数据,实现服务器端分页

  2. 添加搜索和过滤:允许用户按名称、价格范围等过滤产品

  3. 实现CRUD操作:添加创建、更新和删除产品的功能

  4. 添加身份验证:实现用户登录和权限控制

  5. 使用依赖注入:改进架构,使用依赖注入管理数据库上下文

  6. 添加缓存:对不经常变化的数据实施缓存策略

这个示例展示了如何在ASP.NET MVC中使用MySQL数据库,并通过点击按钮执行查询操作。您可以根据实际需求进一步扩展和优化这个应用程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/96381.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/96381.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/96381.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

合理安排时间节点,避免影响正常生产——制造企业软件系统上线的关键考量

在制造企业的发展中&#xff0c;引入新的软件系统是提升管理效率、优化业务流程的重要举措。然而&#xff0c;软件系统的上线过程如果安排不当&#xff0c;很可能会对企业的正常生产造成负面影响。作为一名制造企业的行政经理&#xff0c;在软件选型和推进使用的过程中&#xf…

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原机安卓4升级安卓7/安卓9-通刷包

【一包通刷】晶晨S905L(B)&#xff0f;S905L2(B)&#xff0f;S905L3(B)-原机安卓4升级安卓7&#xff0f;安卓9-通刷固件包线刷方法&#xff1a;1、准备好一根双公头USB线刷刷机线&#xff0c;长度30-50CM长度最佳&#xff0c;同时准备一台电脑&#xff1b;2、电脑上安装好刷机工…

Vite开发:从入门到精通

序章&#xff1a;构建之道现代前端的破局者前端发展简史&#xff1a;从 Grunt、Gulp、Webpack 到 Vite构建工具的本质与未来为什么是 Vite&#xff1f;——新时代的构建哲学本书阅读导览与学习路径第一篇 入门启蒙识得 Vite 真面目第1章 Vite 初识什么是 Vite&#xff1f;设计理…

Spring事件监听机制(二)

接着之前的事件监听机制实现&#xff0c;我们可以进一步优化。从以下两个方面&#xff1a;1.使用EventListener注解Configuration public class TestListener2 {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApp…

STM32物联网项目---ESP8266微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制---代码篇(四)

一、简介该篇代码实现了ESP8266上传数据到云平台的功能&#xff08;可以更改命令和温度的数据&#xff09;&#xff0c;我只测试了上传数据&#xff0c;是没有问题的&#xff0c;如果自己由别的需求可以自行在云平台创建设备和更改代码&#xff1a;二、工程源码这个代码是进行验…

城际班车驾驶员安全学习课程

背景 正在做一个班车预约小程序&#xff0c;里面需要增加一个功能&#xff1a;驾驶员在线学习打卡功能&#xff1a; 图文学习内容&#xff0c;学习完之后&#xff0c;一键打卡&#xff1a;学习完毕&#xff1b;视频学习内容&#xff0c;看完后&#xff0c;一键打卡&#xff1…

Cy5-Tyramide, Cyanine 5 Tyramide;1431148-26-3

一、基本内容&#xff1a; Cyanine 5 Tyramide (Tyramide-Cy5) 是一种红色荧光染料&#xff0c;被用作辣根过氧化物酶 HRP 催化沉积的报告荧光底物&#xff0c;是一种免疫测定和核酸原位杂交中的信号放大技术。 英文名称&#xff1a;Cy5-Tyramide, Cyanine 5 Tyramide中文名称…

5.1 机器学习 - 模型调参

模型调参是提升泛化能力的关键步骤&#xff0c;核心分为 “人工调参”&#xff08;依赖经验与实验管理&#xff09;和 “自动调参”&#xff08;依赖算法与算力&#xff09;&#xff0c;二者适用场景不同&#xff0c;需结合数据量、算力资源和项目周期选择。 一、人工调整超参数…

音视频技术全景:从采集到低延迟播放的完整链路解析

一、为什么需要音视频知识普及 在当下的数字化时代&#xff0c;音视频已经不再是单纯的“附属功能”&#xff0c;而是成为教育、医疗、安防、金融、低空经济、工业互联网等领域的核心生产要素。一条视频链路的质量&#xff0c;直接决定了课堂能否互动顺畅、手术能否远程指导、…

Mybatis常见问题

Mybatis常见问题 什么是Mybatis&#xff1f; &#xff08;1&#xff09;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;加载驱动、创建连接、创建statement等繁杂的过程&#xff0c;开发者开发时只需要关注如何编写SQL语…

Redis(主从复制)

目录 一 为什么要有主从 Redis 二 主从模式 1. 什么是主从模式&#xff1f; 2. 相关操作 3. 查看主从信息&#xff1a; 4. 断开与主节点的关系&#xff1a; 5. 主从结构&#xff1a; 6. 建立主从结构流程&#xff1a; 7. 全量/增量复制流程&#xff1a; 1. 全量复制 …

算法与数据结构实战技巧:从复杂度分析到数学优化

算法与数据结构实战技巧&#xff1a;从复杂度分析到数学优化 引言&#xff1a;为什么算法能力决定你的代码“天花板” 作为程序员&#xff0c;你是否曾遇到这样的困惑&#xff1a;同样是处理数据&#xff0c;别人的代码能轻松扛住10万并发请求&#xff0c;而你的系统在1万数据量…

vue3中 ref() 和 reactive() 的区别

在 Vue 3 中&#xff0c;ref() 和 reactive() 是两种核心的响应式 API&#xff0c;用于创建和管理响应式数据。它们各有适用场景&#xff0c;理解它们的区别和用法对开发至关重要。以下是详细对比和示例&#xff1a;1. ref() 的用法1.1 基本概念ref() 用于创建一个响应式引用&a…

告别加班!这款Axure移动端元件库,让你原型效率提升300%

一、 产品概述 这是一套专为 Axure RP 9/10/11 设计的高质量、高保真移动端&#xff08;APP&#xff09;组件库。它旨在帮助产品经理、UI/UX 设计师和交互设计师快速、高效地绘制出美观且交互丰富的移动端原型&#xff0c;极大提升设计效率和原型保真度。 二、 核心内容与特点…

深入理解synchronized:从使用到原理的进阶指南

目录 一、核心机制深度解析 1. 对象头&#xff08;Object Header&#xff09;与Mark Word的奥秘 2. Monitor&#xff1a;同步的实质 二、锁升级的全过程与底层操作 1. 无锁 -> 偏向锁 2. 偏向锁 -> 轻量级锁 3. 轻量级锁 -> 重量级锁 三、高级话题与实战调优 …

4.1 - 拖链电缆(柔性电缆)与固定电缆

本文介绍固定电缆和拖链专用线缆的对比、以及使用注意事项。尤其是在伺服的电缆选型上&#xff0c;一定要注意。总结成两点&#xff1a;1). 在移动场合&#xff0c;一定要选用拖链电缆&#xff0c;不要用普通电缆去代替&#xff0c;否则很快就会损坏&#xff0c;甚至造成安全隐…

S32K3平台eMIOS 应用说明

S32K3 系列 eMIOS 介绍 1.1 资源介绍 该设备具有 3 个 eMIOS 模块&#xff0c;每个模块的配置如表 1.1 所示。1.2 功能介绍 eMIOS 提供了用于生成或测量时间事件的功能。它使用 UCs&#xff0c;您可以为不同的芯片应 用中的不同功能进行编程。此外&#xff0c;eMIOS 体系结构允…

Next.js中服务器端渲染 (SSR) 详解:动态内容与 SEO 的完美结合

Next.js中服务器端渲染 (SSR) 详解&#xff1a;动态内容与 SEO 的完美结合 作者&#xff1a;码力无边在上一篇文章中&#xff0c;我们深入探讨了静态站点生成 (SSG) 的强大之处&#xff0c;它通过在构建时预先生成页面&#xff0c;为用户提供了极致的访问速度。但现实世界是动态…

c# winform 使用DevExpress制作表格

环境配置创建c# winform 新项目 test_devexpress添加引用把DevExpress.XtraGrid.v17.1.dll拖到工具箱在界面中&#xff0c;加入2个 GridControl设计器代码&#xff1a;namespace test_devexpress {partial class Form1{/// <summary>/// 必需的设计器变量。/// </summ…

数据库之间如何同步

数据库之间如何同步&#xff1a;三种高效方法详解 数据同步无小事&#xff0c;选对方法事半功倍 在现代数据驱动的环境中&#xff0c;​​数据库之间如何同步​​是确保业务连续性和数据一致性的核心技术。本文将深入介绍三种主流的数据库同步方法&#xff0c;帮助您根据实际需…