簡體   English   中英

無法從 Blazor 應用程序中的 Register.cshtml.cs 執行 SQL Server 存儲過程

[英]Unable to execute a SQL Server stored procedure from Register.cshtml.cs in Blazor app

我在 SQL Server 數據庫中有一個Players表,我試圖在注冊期間使用存儲過程將它鏈接到AspNetUsers表。 但是,當我嘗試調用該過程時,此變量 p 為空。 我是這種編碼的新手,所以在回復時請記住這一點。

這是 Register.cshtml.cs 文件中變量 p 為 null 的部分 -

readonly PlayerInitClass p;

public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
        returnUrl = returnUrl ?? Url.Content("~/");
        ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();

        if (ModelState.IsValid)
        {
            var user = new ApplicationIdentityUser { UserName = Input.Email, Email = Input.Email };
            var result = await _userManager.CreateAsync(user, Input.Password);
            int pID = await p.InitPlayerAsync(user);
        }
}

這是我創建的課程 -

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Data.SqlClient;
using Microsoft.EntityFrameworkCore;
using Scorekeeper.Data;

namespace Scorekeeper.Areas.Identity
{
    public class PlayerInitClass
    {
        private readonly ApplicationDbContext _db;

        public PlayerInitClass(ApplicationDbContext db)
        {
            _db = db;
        }

        public async Task<Int32> InitPlayerAsync(ApplicationIdentityUser user)
        {
            int AspNetUserId = user.Id;

            SqlParameter[] @params =
            {
              new SqlParameter("@returnVal", SqlDbType.Int) {Direction = ParameterDirection.Output},
              new SqlParameter("@AspNetUserId", SqlDbType.Int) {Direction = ParameterDirection.Input, Value = AspNetUserId},
          };

            await _db.Database.ExecuteSqlRawAsync("EXEC @returnVal=[dbo].[InitializeNewRegistrationPlayer] @AspNetUserId", @params);

            int result = Convert.ToInt32(@params[0].Value);

            await Task.FromResult(result);
            return result;
        }
    }
}

這是我看到的有關字段 p 為空的警告消息。

在此處輸入圖像描述

我最終找到了一種不為空的方法。 正如您可能已經知道的那樣,我是一個新手,正在盲目地跌跌撞撞地解決這個問題。 話雖這么說,但我不願意說這是問題的“正確”答案。 另外,即使我讓它不為空,它現在也會拋出一個不同的錯誤。 如果我無法弄清楚,我會發布一個單獨的問題。

這是我將 PlayerInitClass 更改為:

public class PlayerInitClass : Microsoft.EntityFrameworkCore.DbContext
{
public PlayerInitClass()
{
    this.context = context;
}

public PlayerInitClass context { get; set; }

這就是我實例化它的方式(不確定這是否是正確的說法):

PlayerInitClass p = new PlayerInitClass();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM