【问题标题】:How to execute stored procedure using blazor如何使用 blazor 执行存储过程
【发布时间】:2020-02-11 04:24:14
【问题描述】:

我一直在寻找一些示例,这些示例表明使用 blazor 执行存储过程。

到目前为止,我还没有看到任何与使用 blazor 执行存储过程相关的内容。


这里是带SP的参数

 MSKCIS.UpdateDischargeBoardData    
        @ClientVisitGuid  ,
        @CurrentLocationGuid  ,
        @DischargeDateExp ,
        @DischargeTimeExp  ,
        @DischargeDtmExp  ,
        @userId     

【问题讨论】:

标签: stored-procedures entity-framework-core blazor


【解决方案1】:

在 EF Core 3.0 中,您需要使用 FromSqlRaw 扩展方法来执行存储过程。

这是一个简单的工作演示,通过存储过程从数据库中获取用户数据。

用户模型

 public partial class Users
{
    [Key]
    public int PkId { get; set; }
    public string UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Supervisor { get; set; }
    public DateTime CreationDate { get; set; }
    public string CreationUser { get; set; }
}

UserManagementContext.cs

public partial class UserManagementContext : DbContext
{
    public UserManagementContext(DbContextOptions<UserManagementContext> options): base(options)
    {}

    public virtual DbSet<Users> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=UserManagementDb;Trusted_Connection=True;ConnectRetryCount=0");
        }
    }
}

用户服务.cs

public class UserService
{
    private readonly UserManagementContext _context;

    public UserService(UserManagementContext context)
    {
        _context = context;
    }

    public async Task<Users[]> GetUsersAsync()
    {
        Users[] u;

        u = _context.Users
            .FromSqlRaw("EXECUTE GetUserByUserId {0}", "User1")
            .ToArray();

        return u;
    }
}

Startup.cs 中的ConfigureServices 方法

public void ConfigureServices(IServiceCollection services)
    {

        services.AddDbContext<UserManagementContext>();

        services.AddRazorPages();
        services.AddServerSideBlazor();
        services.AddSingleton<WeatherForecastService>();

        services.AddTransient<UserService>();  
    }

Index.razor

@page "/"
@using Models
@using Data
@inject UserService us

<form method="post">
<table class="table">
    <thead>
        <tr>
            <th>ID</th>
            <th>UserID</th>
            <th>Name</th>
            <th>Supervisor</th>
            <th>Ersteller</th>
            <th>Erstelldatum</th>
            <th>Optionen</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var user in users)
        {
            <tr>
                <td>@user.PkId</td>
                <td>@user.UserId</td>
                <td>@user.FirstName @user.LastName</td>
                <td>@user.Supervisor</td>
                <td>@user.CreationUser</td>
                <td>@user.CreationDate</td>
                <td>
                    <a>Delete Account</a><br />
                    <a asp-page="/Edit"> Edit Account</a>
                </td>
            </tr>
        }
    </tbody>
</table>
</form>

 @code {

  Users[] users;

  protected override async Task OnInitializedAsync()
  {
    users = await us.GetUsersAsync();
  }
}

【讨论】:

  • 收到此错误。处理请求时发生未处理的异常。 SqlNullValueException:数据为空。不能对 Null 值调用此方法或属性。
  • 你的意思是你使用了我的演示但得到了那个错误?您能否分享有关该错误的更多详细信息?
  • 是的,我使用了这个演示。但是遇到了错误。你能帮我解决这个错误吗?
  • 这个错误信息太笼统,请显示完整的错误信息。Here是我的应用程序,你可以检查差异。如果问题仍然存在,能否展示一个可以重现问题的演示?
  • 您在此处解释的代码用于获取结果。你能告诉我如何使用参数执行 sp 以进行更新操作吗?
猜你喜欢
  • 2011-01-29
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2010-12-23
  • 2013-05-14
  • 2013-12-06
相关资源
最近更新 更多