ASP.NET MVC 連接 MySQL 數據庫查詢示例

為您創建一個完整的?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;幫助您根據實際需…