提交 Razor 页面表单后,本地 SQL Server Express 数据库中未显示更改

问题描述 投票:0回答:1

我正在尝试连接到本地 SQL Server Express 数据库,但是当我使用

.cshtml.cs
页面提交表单时,命令执行后数据不会出现在表中。我不确定这是连接问题还是查询问题,因为我没有收到任何错误消息。

我在网上读到有时更改可能会进入调试文件夹的数据库,但我无法让他们的解决方案为我工作。

这是我用于数据库命令的类:

using Microsoft.Data.SqlClient;

public class DbController
{
    public DbController()
    {
    }

    public void AggiungiUtente(string email, string pass, string ruolo)
    {
        using (SqlConnection conn = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=DomainDb;Integrated Security=True;Connect Timeout=30;Encrypt=False;Trust Server Certificate=False;Application Intent=ReadWrite;Multi Subnet Failover=False"))
        {
            try
            {
                conn.Open();
                string query = "INSERT INTO Utente (Email, PasswordHash, DataCreazione, Ruolo) VALUES (Email, PasswordHash, DataCreazione, Ruolo)";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Errore nella connessione :( " + ex.Message);
            }
        }
    }
}

这是 Razor 页面表单:

@page "/aggiungiutenti"
@{Layout = null;}


<!doctype html>
<html class="fixed">
<head>

    <!-- Basic -->
    <meta charset="UTF-8">

    <title>Form Layouts | Porto Admin - Responsive HTML5 Template</title>

    <meta name="keywords" content="HTML5 Admin Template" />
    <meta name="description" content="Porto Admin - Responsive HTML5 Template">
    <meta name="author" content="okler.net">

    <!-- Mobile Metas -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

    <!-- Web Fonts  -->
    <link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700,800|Shadows+Into+Light" rel="stylesheet" type="text/css">

    <!-- Vendor CSS -->
    <link rel="stylesheet" href="vendor/bootstrap/css/bootstrap.css" />
    <link rel="stylesheet" href="vendor/animate/animate.compat.css">
    <link rel="stylesheet" href="vendor/font-awesome/css/all.min.css" />
    <link rel="stylesheet" href="vendor/boxicons/css/boxicons.min.css" />
    <link rel="stylesheet" href="vendor/magnific-popup/magnific-popup.css" />
    <link rel="stylesheet" href="vendor/bootstrap-datepicker/css/bootstrap-datepicker3.css" />

    <!-- Theme CSS -->
    <link rel="stylesheet" href="css/theme.css" />

    <!-- Skin CSS -->
    <link rel="stylesheet" href="css/skins/default.css" />

    <!-- Theme Custom CSS -->
    <link rel="stylesheet" href="css/custom.css">

    <!-- Head Libs -->
    <script src="vendor/modernizr/modernizr.js"></script>

</head>

<body>
    <section class="body-sign">
        <div class="card-sign center-sign">
            <div class="card-body mt-3">
                <form method="post">
                    <div class="form-group mb3">
                        <label>Email:</label>
                        <div>
                            <input type="email" name="email" class="form-control form-control-lg">
                        </div>
                    </div>
                    <div class="form-group mb3">
                        <label>Password:</label>
                        <div>
                            <input type="password" name="password" class="form-control form-control-lg">
                        </div>
                    </div>
                    <div class="form-group row pb-4">
                        <label class="form-group mb3">Ruolo:</label>
                        <div>
                            <select class="form-control form-control-lg mb-3" name="ruolo">
                                <option style="text-align: center" selected>Amministratore</option>
                                <option style="text-align: center">Utente</option>
                            </select>

                        </div>
                    </div>
                    <button type="submit" class="btn btn-primary" style="display: block; margin: 0 auto; width: 100%;">Invia </button>
                </form>
            </div>
        </div>
    </section>
</body>

</html>

以及处理表单的 cshtml.cs 文件:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace DomainManager.Pages
{
    public class AggiungiUtentiModel : PageModel
    {

        private readonly DbController _DbController;

        public AggiungiUtentiModel()
        {
            _DbController = new DbController();
        }

        public IActionResult OnPost(string email, string password, string ruolo)
        {
            if(ModelState.IsValid)
            {
                _DbController.AggiungiUtente(email, password, ruolo);

                return Page();
            }

            else return Page();
        }
    }
}

我已经检查了我的连接字符串和代码,应该将数据插入表中,但是当我检查数据库时,它仍然显示为空。

问题是,即使没有抛出错误,数据库也不会反映更改。整个事情对我来说看起来很简单,但我不知道还能去哪里看看。如有任何帮助,我们将不胜感激!

c# asp.net database razor sql-server-express
1个回答
0
投票

我们先确保连接字符串正确,然后就可以查询出当前的数据表,然后尝试插入数据。我用下面的代码进行了测试,它对我有用。

public IActionResult OnPost(string email, string password, string ruolo)
{
    if (ModelState.IsValid)
    {
        var connection = "Server=(localdb)\\mssqllocaldb;Database=aspnet-WebAppxxxxx5BEC;Trusted_Connection=True;MultipleActiveResultSets=true";
        using (SqlConnection conn = new SqlConnection(connection))
        {
            try
            {
                conn.Open();
                
                string query = "INSERT INTO Utente (Email, PasswordHash,  Ruolo) VALUES (@Email, @PasswordHash,  @Ruolo)";
                string search = "select * from Utente";
                SqlCommand selCmd = new SqlCommand(search, conn);
                SqlDataAdapter da = new SqlDataAdapter(selCmd);
                var dataTable = new DataTable();
                da.Fill(dataTable);
                var res = dataTable.AsEnumerable();
                da.Dispose();


                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.Parameters.AddWithValue("@Email", email);
                cmd.Parameters.AddWithValue("@PasswordHash", password);
                cmd.Parameters.AddWithValue("@Ruolo", ruolo);
                cmd.ExecuteNonQuery();
                conn.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Errore nella connessione :( " + ex.Message);
            }
        }

        return Page();
    }

    else return Page();
}

我的桌子如下所示。然后,如果我使用

string query = "INSERT INTO Utente (Email, PasswordHash, DataCreazione, Ruolo) VALUES (Email, PasswordHash, DataCreazione, Ruolo)";
但没有为
DataCreazione
赋予值,我会收到错误。我还需要
VALUES (@Email, @PasswordHash,  @Ruolo)
而不是
VALUES (Email, PasswordHash, Ruolo)
,否则我会收到无效列错误。

CREATE TABLE [dbo].[Utente] (
    [Id]            INT           IDENTITY (1, 1) NOT NULL,
    [Email]         NVARCHAR (50) NULL,
    [PasswordHash]  NVARCHAR (50) NULL,
    [DataCreazione] NVARCHAR (50) NULL,
    [Ruolo]         NVARCHAR (50) NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
© www.soinside.com 2019 - 2024. All rights reserved.