Blazor入门-连接MySQL的简单例子:列出数据+简单查询
参考:
ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库_blazor mysql-CSDN博客
https://blog.csdn.net/mzl87/article/details/129199352
本地环境:win10, visual studio 2022 community, mysql 8.0.33 (MySQL Community Server), net core 6.0
目录
- 问题
- 实现效果
- 前置工作
- 配置VS插件/程序包
- 配置MySQL
- blazor配置和编码
- 1.创建模型类
- 2.创建连接类
- 2.1创建连接辅助类
- 2.2创建连接类
- 3.创建服务类
- 4.创建客户端razor
- 5.配置侧边栏
问题
假设本地装有MySQL,里面有一个数据库名为vector,其下有一个表名为basic_unit,现在需要在某个网页上:
- 列出basic_unit中所有数据
- 能根据字段 Name 和(或)Type 查询并列出结果。
实现效果
- 列出所有数据

- 查询

前置工作
配置VS插件/程序包
使用 NuGet 安装如下两个程序包。其中,第一个包可能要对照.NET的版本,如果对不上会安装失败。

配置MySQL
首先创建一个表:
create table basic_unit(id int unsigned not null AUTO_INCREMENT,name varchar(200) default null,ustart int default -1,uend int default -1,direction varchar(1) default 'n',unit_type varchar(100) default null,seq varchar(15000) default null,primary key(id)
) engine=InnoDB;
然后创建一个procedure:
use vector;
delimiter $$mysql> create procedure SearchBU(in n varchar(200), in utype varchar(100))-> BEGIN-> select name, ustart, uend, direction, unit_type, seq-> from basic_unit-> where-> name like concat('%', n, '%')-> and-> unit_type like concat('%', utype, '%');-> END$$
Query OK, 0 rows affected (0.04 sec)
测试一下procedure是否创建成功:
mysql> call SearchBU("AmpR promoter","promoter");
+---------------+--------+------+-----------+-----------+-----------------------------------------------------------------------------------------------------------+
| name | ustart | uend | direction | unit_type | seq |
+---------------+--------+------+-----------+-----------+-----------------------------------------------------------------------------------------------------------+
| AmpR promoter | 1 | 105 | f | promoter | CGCGGAACCCCTATTTGTTTATTTTTCTAAATACATTCAAATATGTATCCGCTCATGAGACAATAACCCTGATAAATGCTTCAATAATATTGAAAAAGGAAGAGT |
+---------------+--------+------+-----------+-----------+-----------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.01 sec)
blazor配置和编码
blazor项目的创建参见下面的链接,此处不再展开。
Blazor入门-基础知识+vs2022自带例程的理解_blazor教程 菜鸟-CSDN博客
https://blog.csdn.net/pxy7896/article/details/138621017
1.创建模型类
在项目中新建一个文件夹Models,然后创建一个模型类 BasicUnit。我把Models放在Data文件夹下,其实也可以放在根目录,都可以。
namespace BlazorApp1.Data.Models
{public class BasicUnit{public int Id { get; set; }public string? Name { get; set; }public int Ustart { get; set; } = -1;public int Uend { get; set; } = -1;public string Direction { get; set; } = "n";public string? UnitType { get; set; }public string? Seq { get; set; }}
}
2.创建连接类
2.1创建连接辅助类
还是在Models下创建一个连接辅助类 MySQLHelper,内容为:
using MySqlConnector;namespace BlazorApp1.Data.Models
{public class MySQLHelper{//this field gets initialized at Program.cspublic static string? conStr;public static MySqlConnection GetConnection(){try{MySqlConnection connection = new MySqlConnection(conStr);return connection;}catch (Exception e){Console.WriteLine(e);throw;}}}
}
然后在 Program.cs 中初始化这个辅助类:
using BlazorApp1.Data.Models;
....
builder.Services.AddServerSideBlazor();
...
// connect mysql
MySQLHelper.conStr = builder.Configuration["ConnectionStrings:DefaultConnection"];var app = builder.Build();
...
然后修改 appsettings.json ,增加一段内容:
"ConnectionStrings": {"DefaultConnection": "server=localhost;user id=用户名;password=密码;port=3306;database=数据库名称;"},
这样连接辅助类就拿到连接所需的各种信息了。
2.2创建连接类
下面的代码很好理解,就是在函数里执行查询过程,然后包装结果,准备传递给service。
using BlazorApp1.Data.Models;
using MySqlConnector;
using System.Data;namespace BlazorApp1.Data
{public class BasicUnitConnection{public async Task<BasicUnit[]> SearchBasicUnits(string name, string utype) { List<BasicUnit> basicUnits = new List<BasicUnit>();// 辅助类提供了连接信息using (MySqlConnection conn = MySQLHelper.GetConnection()) { // open connectionconn.Open();// SearchBU 是前面创建的查询过程(procedure)using (MySqlCommand cmd = new MySqlCommand("SearchBU", conn)) {cmd.CommandType = CommandType.StoredProcedure;// add parameterscmd.Parameters.Add(new MySqlParameter { ParameterName = "@n",DbType = DbType.String,Value = name,Direction = ParameterDirection.Input,});cmd.Parameters.Add(new MySqlParameter{ParameterName = "@utype",DbType = DbType.String,Value = utype,Direction = ParameterDirection.Input,});// 执行查询,将收到的查询结果包装成模型对象// 查询结果应与sql查询语句对应,包括类型using (MySqlDataReader reader = cmd.ExecuteReader()) {while (reader.Read()) {basicUnits.Add(new BasicUnit() { Name = reader.GetString("name"),Ustart = reader.GetInt32("ustart"),Uend = reader.GetInt32("uend"),Direction = reader.GetString("direction"),UnitType = reader.GetString("unit_type"),Seq = reader.GetString("seq"),});}} }}//Console.WriteLine(basicUnits.Count);return basicUnits.ToArray();}}
}
3.创建服务类
服务类更简单了,只要调用上面的连接类里的函数即可。
using BlazorApp1.Data.Models;namespace BlazorApp1.Data
{public class BasicUnitService{private BasicUnitConnection conn { get; set; } = new BasicUnitConnection();public async Task<BasicUnit[]> GetBasicUnitsByNameType(string name, string type) {BasicUnit[] res = conn.SearchBasicUnits(name, type).Result.ToArray();return res;}}
}
4.创建客户端razor
razor是显示内容的元件,里面包括一个查询框和一个查询结果列表,两个都是table。
需要注意的是,如果模型的一个属性可能是null,需要注意处理。
@page "/basicunit/list"
@using BlazorApp1.Data
@using BlazorApp1.Data.Models;
@inject BasicUnitService basicUnitService<h3>BasicUnitList</h3><!-- search frame -->
<table><tr style="height: 30px; background-color:#336699 ;color:#FFFFFF ;border: solid 1px #659EC7;"><td colspan="5" align="left">Search BasicUnit</td></tr><tr><td>Name:</td><td><input class="input-group-text" type="text" @bind-value="@custName" /></td><td>Type:</td><td><input class="input-group-text" type="text" @bind-value="@custType" /></td><td><input type="button" class="btn btn-primary"value="Search" @onclick="@searchDetails" /></td></tr>
</table><hr/>@if (basicUnits == null)
{<p><em>Loading...</em></p>
} else
{<table class="table"><thead><tr><th>Name</th><th>Start</th><th>End</th><th>Length</th><th>Direction</th><th>Type</th><th>Seq</th></tr></thead><tbody>@foreach(var bu in basicUnits){bsize = @bu.Uend - bu.Ustart + 1;if (@bu.Seq != null){bseq = bu.Seq;if (bsize > 50){bseq = bseq.Substring(0, 50) + "...";}}<tr><td>@bu.Name</td><td>@bu.Ustart</td><td>@bu.Uend</td><td>@bsize</td><td>@bu.Direction</td><td>@bu.UnitType</td><td>@bseq</td></tr> }</tbody></table>
}
代码部分则是:
@code {private string custName = "";private string custType = "";private BasicUnit[]? basicUnits;private int bsize = -1; // 因为要计算seq属性的长度,所以额外用一个变量private string bseq = ""; // 显示的seqprotected override async Task OnInitializedAsync(){basicUnits = await basicUnitService.GetBasicUnitsByNameType(custName, custType); }async Task searchDetails(){basicUnits = await basicUnitService.GetBasicUnitsByNameType(custName, custType);} }
5.配置侧边栏
修改 NavMenu.razor ,给侧边栏增加一个链接:
<div class="@NavMenuCssClass" @onclick="ToggleNavMenu"><nav class="flex-column"><div class="nav-item px-3"><NavLink class="nav-link" href="/" Match="NavLinkMatch.All"><span class="oi oi-home" aria-hidden="true"></span> Home</NavLink></div><!-- 新增的部分 --><div class="nav-item px-3"><!-- href就是上面razor里@page后跟的字符串 --><NavLink class="nav-link" href="/basicunit/list"><span class="oi oi-list-rich" aria-hidden="true"></span> Basic Unit</NavLink></div><!-- 新增的部分 END --> </nav>
</div>
done.
相关文章:
Blazor入门-连接MySQL的简单例子:列出数据+简单查询
参考: ASP.NET Core 6.0 Blazor Server APP并使用MySQL数据库_blazor mysql-CSDN博客 https://blog.csdn.net/mzl87/article/details/129199352 本地环境:win10, visual studio 2022 community, mysql 8.0.33 (MySQL Community Server), net core 6.0 目…...
CEEMDAN +组合预测模型(CNN-Transfromer + XGBoost)
注意:本模型继续加入 组合预测模型全家桶 中,之前购买的同学请及时更新下载! 往期精彩内容: 时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较-CSDN博客 VMD CEEMDAN 二次分解,Transformer-BiGRU预测模…...
箭头函数的意义和函数的二义性
前言 说到箭头函数,可能很多人的第一反应就是和普通函数的区别: 箭头函数没有 this,普通函数的 this 指向依赖它是如何被调用的箭头函数没有 arguments 对象,而是通过剩余参数(rest parameters)来获取所有…...
618必买的数码好物有哪些?盘点兼具设计与实用的数码好物分享
随着618购物节的到来,数码爱好者们又开始跃跃欲试,期待在这个年度大促中寻找到自己心仪的数码好物,在这个数字化时代,数码产品不仅是我们日常生活的必需品,更是提升生活品质的重要工具,那么在众多的数码产品…...
【好书分享第十三期】AI数据处理实战108招:ChatGPT+Excel+VBA
文章目录 一、内容介绍二、内页插图三、作者简介四、前言/序言五、目录 一、内容介绍 《AI数据处理实战108招:ChatGPTExcelVBA》通过7个专题内容、108个实用技巧,讲解了如何运用ChatGPT结合办公软件Excel和VBA代码实现AI办公智能化、高效化。随书附赠了…...
001 CentOS 7.9 安装及配置jdk-8u411-linux-x64.tar.gz
文章目录 1. 下载JDK安装包2. 创建安装目录3. 上传并解压JDK安装包4. 配置环境变量5. 验证安装-bash: pathmunge: command not found配置文件区别$PATH https://dbeaver.io/ 1. 下载JDK安装包 首先,需要从Oracle官方网站或其他可信赖的来源下载jdk-8u411-linux-x64…...
Revit二次开发-WPF ProgressBar 执行程序中显示进度条
Revit开发执行命令时如果时间长,界面会顶住,导致用户误以为程序未响应,解决方法:增加WPF ProgressBar 进度条执行程序中显示进度条,提示命令还是进行中, 实现流程: 新建一个WPF,Window启动时加载一个事件Loaded=“Window_Loaded”,用于显示进度条在WPF后台,新建一个异…...
React:构建Web应用的未来
引言 在不断发展的Web开发领域,React已经成为一股主导力量,重塑了我们构建用户界面和交互式应用的方式。React由Facebook(现Meta)开发,由于其创新的基于组件的架构、高效的虚拟DOM渲染和声明式编程风格而广受欢迎。在…...
【Elasticsearch】Centos7安装Elasticsearch、kibana、IK分词
目录 本文安装包下载地址注意安装elasticsearch1.上传文件2.解压elasticsearch-6.3.1.tar.gz3.开启远程连接权限4.修改其他配置[root用户操作]5.重启虚拟机6.启动es7.外部访问 安装kibana-61.解压2.配置3.启动kibana4.访问5.在开发工具中做数据的增删改查操作 安装IK分词1.wind…...
IDEA中各种Maven相关问题(文件飘红、下载依赖和启动报错)
错误情况 包名、类名显示红色、红色波浪线,大量依赖提示不存在(程序包xxx不存在) 工程无法启动 一、前提条件 1、使用英文原版IDEA 汉化版的可能有各种奇怪的问题。建议用IDEA英文版,卸载重装。 2、下载maven,配置环…...
Android 13 VSYNC重学习
Android 13 VSYNC重学习 引言 学无止境,一个字干就完事! 源码参考基于Android 13 aosp! 一. Android VSync模块开胃菜 在开始正式的分析之前,我们先简单对Android的Vsync模块简单介绍下,如下图所示,其中: HW_VSync是…...
std::move和左值右值
引用:windows程序员面试指南 std::move std::move 是 C 标准库中的一个函数模板,用于将一个左值(左值引用)转化为右值引用,从而实现移动语义。 移动语义是一种可以将资源(如内存)从一个对象转…...
QT学习备份
2023年1月2日09:00:32 1.信号/槽编辑器 发送者:控件 信号:是控件发出的信号 接受者:包含控件的容器 槽:程序上用slot标识的方法 2.Q_OBJECT宏 只有继承了QObject类的类,才具有信号槽的能力。所以,为了使用…...
【wiki知识库】03.前后端的初步交互(展现所有的电子书)
📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、📂前端配置文件补充 三、🌏前端Vue的改造 四、💡总结 一、🔥今日目标 在上一篇文章当中,我已带大家把后端的一些基本工…...
AOP——学习
AOP(面向切面编程)是Spring框架的重要特性之一,用于分离关注点并处理横切关注点,如日志记录、安全性和事务管理。在面试中,AOP相关的问题通常会涉及基本概念、应用场景、实际使用、以及与其他编程范式的比较。以下是一…...
Linux静态库、共享动态库介绍、制作及使用
参考学习:Linux下的各种文件 、动态库基本原理和使用方法,-fPIC选项的来龙去脉 、Linux静态库和动态库分析 文章写作参考:Linux共享库、静态库、动态库详解 - sunsky303 - 博客园 (cnblogs.com) 一.Linux共享库、静态库、动态库详解 使用G…...
【Paddle】稀疏计算的使用指南 稀疏ResNet的学习心得 (2) + Paddle3D应用实例稀疏 ResNet代码解读 (1.6w字超详细)
【Paddle】稀疏计算的使用指南 & 稀疏ResNet的学习心得 Paddle3D应用实例稀疏 ResNet代码解读 写在最前面一、稀疏格式简介1. COO(Coordinate Format)2. CSR(Compressed Sparse Row Format) 二、Paddle稀疏张量支持1. 创建 C…...
Linux系统维护
1. 批量安装部署 2. 初始化配置 3. 禁用Selinux 永久更改 SELinux 配置: 编辑 SELinux 配置文件:使用文本编辑器打开 /etc/selinux/config 文件: 在配置文件中,找到 SELINUX… 的行。将其值更改为以下选项之一: e…...
经典文献阅读之--RenderOcc(使用2D标签训练多视图3D Occupancy模型)
0. 简介 3D占据预测在机器人感知和自动驾驶领域具有重要的潜力,它将3D场景量化为带有语义标签的网格单元。最近的研究主要利用3D体素空间中的完整占据标签进行监督。然而,昂贵的注释过程和有时模糊的标签严重限制了3D占据模型的可用性和可扩展性。为了解…...
蓝牙设备中的UUID
文章目录 一、Device UUID二、Service UUID 一、Device UUID Device UUID也可以被称作为DeviceID。 Android 设备上扫描获取到的 deviceId 为外围设备的 MAC 地址,相对固定。iOS 设备上扫描获取到的 deviceId 是系统根据外围设备 MAC 地址及发现设备的时间生成的 …...
循环冷却水流量示意图设计 建筑水流量示意图绘制教程
一、引言 在建筑给排水、暖通空调及工业循环水系统设计中,循环冷却水流量示意图与建筑水流量示意图是核心技术图纸之一,其作用是直观呈现水流路径、管径规格、流量分配、设备连接关系及压力节点参数,为系统施工、调试、运维及故障排查提供可…...
汇智信科-机场数字孪生系统
机场数字孪生系统以数字化孪生技术构建机场全要素虚拟映射,精准还原机场、跑道、塔台等设施及飞机运行状态,支持多维度动态监测与可视化管控;通过模拟飞机调度、跑道滑行等全流程作业场景,覆盖机场多角色业务协同,同时…...
SGLang-v0.5.6优化升级:多GPU协同,推理性能大幅提升
SGLang-v0.5.6优化升级:多GPU协同,推理性能大幅提升 1. 引言 在当今大模型应用日益普及的背景下,推理性能优化成为开发者面临的核心挑战之一。SGLang-v0.5.6作为结构化生成语言框架的最新版本,带来了多项关键性改进,…...
电池包结构仿真与力学分析指南
电池包结构仿真,电池包力学仿真,电池包CAE分析,新能源电池电池CAE分析,结构仿真,力学分析附带相对应的模型文件,指导书,可直接自己跟着做分析另外附赠完整电池包模型一、概述随着新能源汽车的飞速发展&…...
抑制素A抗体如何提升妊娠中期唐氏综合征筛查的效能?
一、为何抑制素A成为妊娠期的重要生物标志物?抑制素A是一种由α和βA亚基通过二硫键连接形成的异源二聚体糖蛋白。在非妊娠期,它主要由卵巢颗粒细胞分泌,作为反馈调节因子,选择性地抑制垂体前叶分泌卵泡刺激素。进入妊娠状态后&am…...
Ostrakon-VL终端效果展示:深夜食堂风格终端打印输出全过程录屏
Ostrakon-VL终端效果展示:深夜食堂风格终端打印输出全过程录屏 1. 像素特工终端概览 在零售与餐饮行业的数字化转型浪潮中,我们开发了这款基于Ostrakon-VL-8B多模态大模型的Web交互终端。与传统工业级UI不同,我们采用了高饱和度的像素艺术风…...
从选型到焊接:一份给嵌入式新手的晶振避坑指南(含32.768KHz实例)
从选型到焊接:嵌入式开发者的晶振实战避坑手册 第一次点亮自己设计的电路板时,那颗小小的晶振就像电子世界的心跳起搏器。记得三年前我为一个智能家居项目调试STM32时,连续三天卡在"晶振不起振"的问题上——电路图反复检查无误&…...
电力系统输电线路距离保护建模与仿真:方向阻抗继电器探秘
1.电力系统输电线路距离保护的建模与仿真matlab/simulink仿真模型 2.方向阻抗继电器 (1)“0度接线”方向阻抗继电器的构造 (2)“相电压和具有K3I0补偿的相电流接线”的方向阻抗继电器模块的构造在电力系统中,输电线路距…...
langchain技术栈研究
引言 langchain新版本1.1.0 出来了,老版的api看了一些,api写法看起来有些凌乱,感觉还是SpringAI相对好好记忆一些。不知到1.x版本的会好使一些不。我们先来看看新版的langchain、langgraph、deepagents。 python vscode安装了一个backformate…...
PID控制在自动循迹小车中的实战应用与参数整定指南
PID控制在自动循迹小车中的实战应用与参数整定指南 当你在实验室里第一次看到自己设计的自动循迹小车歪歪扭扭地沿着黑线前进时,那种既兴奋又挫败的感觉一定记忆犹新。为什么理论上完美的PID算法,在实际应用中却总是出现超调、振荡或者响应迟缓ÿ…...
