65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET Core 6.0 Blazor Server APP 和 MySQL 数据库操作

starIconstarIconstarIconstarIconstarIcon

5.00/5 (2投票s)

2022 年 10 月 11 日

CPOL

6分钟阅读

viewsIcon

10846

downloadIcon

304

ASP.NET Core 6.0 中的 Blazor Server APP

引言

Blazor 是微软推出的一款框架。我喜欢使用 Blazor,因为它使我们的 SPA 全栈应用程序开发变得更加简单,是的,现在我们可以只使用一种语言 C#。在 Blazor 之前,我们使用 ASP.NET Core 配合 Angular 或 ReactJS。现在,借助 Blazor 的支持,我们可以直接使用 C# 代码创建自己的 SPA 应用程序。

我们可以开发两种不同类型的 Blazor 应用程序

  1. Blazor Server App,以及
  2. Blazor WebAssembly

Blazor WebAssembly

WebAssembly 或 WASM 在客户端运行。WebAssembly 是开放的 Web 标准,无需任何插件即可在浏览器中运行。WASM 使用 JavaScript 互操作性来访问浏览器的全部功能。这里,我们可以看到 ASP.NET Core WASM 应用程序的结构,因为解决方案中只有客户端开发,其结构与 ASP.NET Core Angular 独立模板相同。对于任何服务器端业务逻辑或使用数据库,我们需要创建一个 ASP.NET Core WEB API 或其他服务器端项目,并将服务器端数据绑定到 WASM 应用程序。

Blazor Server

Blazor Server 在 ASP.NET 服务器上运行,这意味着它在服务器端运行。Blazor Server App 使用 Signal R 将更新持续推送到客户端。所有 JavaScript 调用、UI 更新以及所有应用程序事件处理都通过 Signal R 和 WebSocket 协议连接进行。Blazor Server 应用比 WASM 速度更快,因为下载大小比 WASM 应用程序要小。这里,我们可以看到 ASP.NET Core Blazor Server 应用程序的结构,因为解决方案中有一个Data 文件夹,我们可以在其中编写所有服务器端业务逻辑,并使用服务执行与数据库相关的连接。

背景

这里,我使用了 MySQL 作为数据库,您可以免费下载 Visual Studio 和 MySQL Community Edition,然后开始您的开发。

请确保您的计算机上已安装所有先决条件。如果没有,请下载并全部安装。

Using the Code

MySQL 部分

创建数据库和表

这里,我们使用 MySQL Workbench 创建一个名为 customer 的数据库,并创建一个名为 custmaster 的表。

创建存储过程

让我们创建一个存储过程,通过客户姓名和客户电子邮件进行搜索和获取客户详细信息。

CREATE DEFINER=`shanu`@`%` PROCEDURE `sp_custGet`(IN CustName varchar(50),
IN Email varchar(50)    )
BEGIN
     
            Select  CustCd,
                    CustName,
                    Email,
                    PhoneNo,
                    Address
            FROM customer.custmaster
            WHERE
            CustName LIKE CONCAT('%', CustName , '%') 
            AND
            Email LIKE  CONCAT('%', Email , '%') ;
             
END

要在 MySQL 中测试存储过程,我们使用下面的代码作为调用,并使用存储过程名称,现在我们为 custnameemail 传递空参数。

Blazor 部分

安装完以上所有先决条件后,点击桌面上的 **开始** >> **程序** >> **Visual Studio 2022** >> **Visual Studio 2022**。点击 **新建** >> **项目**。

搜索 **Blazor Server App** 项目,然后点击 **下一步**。

输入您的项目名称并点击 下一步

选择 .NET 6.0,然后点击 Next 创建您的 Blazor 应用程序。

步骤 2:连接字符串

打开 appsettings.json 文件,并添加 MySQL 连接字符串。
注意:添加您的 MySQL 服务器 ID 详细信息。

步骤 3:安装包

为了在我们的 Blazor 应用程序中使用 MySQL 数据库,这里我们安装下面提到的包

MySqlConnector
Microsoft.EntityFrameworkCore

步骤 4:创建模型类

接下来,我们需要创建 Model 类,以便在我们的应用程序中使用以绑定客户详细信息。
让我们从解决方案中创建一个名为 Models 的新文件夹,然后右键单击创建的 Models 文件夹,创建一个名为“CustMaster.cs”的新类文件。
在类中,我们添加属性字段名称,该名称与下面的代码相同

public class custmaster
    {
        public string CustCd { get; set; }
        public string CustName { get; set; }
        public string Email { get; set; }
        public string PhoneNo { get; set; }
        public string Address { get; set; }
    }

步骤 5:创建 MySQL 连接类

现在让我们创建 MySQL 连接类,为此,让我们创建一个类文件。
右键单击创建的 Models 文件夹,创建一个名为 mySQLSqlHelper.cs 的新类文件。

using MySqlConnector;

namespace BlazorMysql.Models
{
    public class mySQLSqlHelper
    {
        //this field gets initialized at Startup.cs
        public static string conStr;

        public static MySqlConnection GetConnection()
        {
            try
            {
                MySqlConnection connection = new MySqlConnection(conStr);
                return connection;
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
    }
}

现在打开 Program.cs 文件,让我们将 appsetting.json 中的连接字符串分配给 mysqlHelper constring 变量,以便连接到 MySQL。

using BlazorMysql.Data;
using BlazorMysql.Models;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;

var builder = WebApplication.CreateBuilder(args);

mySQLSqlHelper.conStr = builder.Configuration["ConnectionStrings:DefaultConnection"];

步骤 6:创建客户 MySQL 连接类

右键单击解决方案中的 Data 文件夹,然后添加一个名为 custConnections.cs 的新类。
在这个类中,我们创建 GetCustDetails 来连接数据库,通过调用存储过程并传递所需参数来获取客户详细信息,然后将其返回到我们的 Service 列表。

using BlazorMysql.Models;
using MySqlConnector;
using System.Data;

namespace BlazorMysql.Data
{
    public  class custConnectoins
    {
        public  async Task<custmaster[]> GetCustDetails(string CustName, String Email)
        {
            List<custmaster> list = new List<custmaster>();
            using (MySqlConnection conn = mySQLSqlHelper.GetConnection())
            {
                conn.Open();
                
                using (MySqlCommand cmd = new MySqlCommand("sp_custGet", conn))
                {
                    cmd.CommandType = CommandType.StoredProcedure;

                    cmd.Parameters.Add(new MySqlParameter
                    {
                        ParameterName = "@CustNames",
                        DbType = DbType.String,
                        Value = CustName,
                        Direction = ParameterDirection.Input,
                    });
                    cmd.Parameters.Add(new MySqlParameter
                    {
                        ParameterName = "@Emails",
                        DbType = DbType.String,
                        Value = Email,
                        Direction = ParameterDirection.Input,
                    });
                    using (MySqlDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            list.Add(new custmaster()
                            {
                                CustCd = reader.GetInt32("CustCd"),
                                CustName = reader.GetString("CustName"),
                                Email = reader.GetString("Email"),
                                PhoneNo = reader.GetString("PhoneNo"),
                                Address = reader.GetString("Address"),
                            });
                        }
                    }
                }
            }

            return list.ToArray();
        }
    }
} 

步骤 7:使用 Service 类

接下来,我们创建 custMasterDetailSerivce.cs 类,并添加一个名为 GetCustDetails 的函数,以便将结果绑定到我们的 Blazor 应用。

using BlazorMysql.Models;
namespace BlazorMysql.Data
{
    public class custMasterDetailSerivce
    {
        custConnectoins objUsers = new custConnectoins();
        public  async Task<custmaster[]> GetCustDetails(string CustName, String Email)
        {
            custmaster[] custsObjs; 
            custsObjs = objUsers.GetCustDetails(CustName, Email).Result.ToArray();
            return custsObjs; 
        }
    }
}

步骤 8:添加 Service

我们需要将我们创建的服务添加到 Program.cs 类中。

builder.Services.AddSingleton<custMasterDetailSerivce>();

步骤 9:使用客户端项目

首先,我们需要添加 Razor 组件页面。
添加 Razor 组件。
要添加 Razor Component 页面,请右键单击解决方案中的 Pages 文件夹。点击 **添加** >> **新项** >> **选择 Razor Component** >> 输入您的组件名称,这里我们命名为 Customer.razor

注意:所有组件文件都需要以* .razor*为扩展名。

在 Razor Component 页面中,我们有三个代码部分:第一个是 Import 部分,我们导入所有需要的引用和模型供组件使用;第二个是 HTML 设计和数据绑定部分;最后,我们有函数部分,用于注入和调用服务以绑定到我们的 HTML 页面,并执行要在 Component 页面中显示的前端业务逻辑。

导入部分

首先,我们在 Razor 视图页面中导入所有需要的支持文件和引用。这里,我们首先导入了要在视图中使用的 Model 和 service 类。

@page "/Customer"
@using BlazorMysql.Models
@using BlazorMysql.Data 
@inject custMasterDetailSerivce CustomerService

HTML 设计和数据绑定部分

在设计部分,我们将结果绑定到表格,并设计了一个带有按钮的搜索部分。

<h1>Customer Details</h1>

<table >
    <tr style="height: 30px; background-color:#336699 ; 
     color:#FFFFFF ;border: solid 1px #659EC7;">
        <td colspan="5" align="left">
            Search Customer
        </td>
    </tr>
    <tr>
        <td>Cust Code:</td>
        <td>
            <input class="input-group-text" type="text" @bind-value="@CustName" />
        </td>

        <td>Cust Name:</td>
        <td>
            <input class="input-group-text" type="text" @bind-value="@Email" />
        </td>
        <td>
            <input type="button" class="btn btn-primary" 
             value="Search" @onclick="@searchDetails" />
        </td>
    </tr>
</table>
<hr />
@if (custDetails == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Customer Code</th>
                <th>Customer Name</th>
                <th>Email</th>
                <th>Phone No</th>
                <th>Address</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var cuDetails in custDetails)
            {
                <tr>
                    <td>@cuDetails.CustCd</td>
                    <td>@cuDetails.CustName</td>
                    <td>@cuDetails.Email</td>
                    <td>@cuDetails.PhoneNo</td>
                    <td>@cuDetails.Address</td>
                </tr>
            }
        </tbody>
    </table>
}

函数部分

函数部分用于获取 Service 结果并将其绑定到数组,我们创建了一个函数,用于在单击按钮时搜索并绑定结果。

这里,我们首先声明一个客户 Array 来获取绑定结果,并声明搜索变量。

OnInitializedAsync 中,我们获取 CustomerService 结果,并将结果绑定到 ItemsArrays

@code {
    String CustName = "";
    String Email = "";
    private custmaster[]? custDetails;

    protected override async Task OnInitializedAsync()
    {
        custDetails = await CustomerService.GetCustDetails(CustName,Email);
    }

     //SearchCustomer
    async Task searchDetails()
    {
        custDetails = await CustomerService.GetCustDetails(CustName,Email);
    }
}

导航菜单

现在,我们需要将这个新添加的客户 Razor 页面添加到我们的左侧导航。要添加此项,请打开 Shared 文件夹并打开 NavMenu.cshtml 页面,然后添加菜单。

<div class="nav-item px-3">
            <NavLink class="nav-link" href="Customer">
                <span class="oi oi-list-rich" aria-hidden="true"></span> Customer
            </NavLink>
        </div>

构建并运行应用程序

关注点

希望本文能帮助您了解如何开始使用 ASP.NET Core 6.0 和 Blazor 应用程序,并通过搜索功能与 MySQL 数据库配合使用。

历史

  • 2022 年 10 月 11 日:初始版本
© . All rights reserved.