Web App VS2017 não grava SQL 2014

4 respostas
databasecsharp
R

Seguinte galera. Tenho um web app mvc que já vem pronto do VS2017. Fiz uma conexão com o banco SQL Server 2014 (maquina com Win 7 não instala SQLServer2017) e era pra fazer um CRUD básico, mas não está gravando. Na 1ª tentativa de compilação deu erro no arquivo appsettings.json que tem esse conteúdo:

{
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=Junina;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

Que quando o VS criou automatico veio só com isso:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}
Adicionei as informações da String de conexão com o banco ( “ConnectionStrings”: {

“DefaultConnection”: “Server=(localdb)\MSSQLLocalDB;Database=Junina;Trusted_Connection=True;MultipleActiveResultSets=true”

},)

E tem o controller que executa a gravação das informações recebidas na view dadas pelo usuário:

HomeController.cs

/<em>imports e outras coisas</em>/
/*ACESSO AO BANCO PARA INSERÇÃO DE DADOS*/

        [HttpPost]
        public IActionResult Create_Post(Aluno aluno)
        {
            if (ModelState.IsValid)
            {
                string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    string sql = $"Insert Into Aluno (Nome, Classe, RA) Values ('{aluno.Nome}', '{aluno.Classe}','{aluno.RA}')";

                    using (SqlCommand command = new SqlCommand(sql, connection))
                    {
                        command.CommandType = CommandType.Text;
                        connection.Open();
                        command.ExecuteNonQuery();
                        connection.Close();
                    }
                    return RedirectToAction("Index");
                }
            }
            else
                return View();
        }

e no Index.cshtml eu coloquei os inputs e botão para gravação:

Index.cshtml
@model Aluno

@{
    Layout = "_Layout";
    var title = "Criar Aluno";
    ViewData["Title"] = title;
}

<style>
    .input-validation-error {
        border-color: red;
    }
</style>

<h2>@title</h2>

<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<form class="m-1 p-1" method="post">
    <div class="form-group">
        <label asp-for="Nome"></label>
        <input asp-for="Nome" class="form-control" />
        <span asp-validation-for="Nome" class="text-danger"></span>
    </div>

    <div class="form-group">
        <label asp-for="Classe"></label>
        <input asp-for="Classe" type="text" class="form-control" />
        <span asp-validation-for="Classe" class="text-danger"></span>
    </div>

    <div class="form-group">
        <label asp-for="RA"></label>
        <input asp-for="RA" type="text" class="form-control" />
        <span asp-validation-for="RA" class="text-danger"></span>
    </div>

    <button type="submit" class="btn btn-primary">Enviar</button>
</form>

<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/dist/jquery.validate.unobtrusive.min.js"></script>

E tem também a classe Aluno.cs que é o modelo de dados:

Aluno.cs

public class Aluno
    {
        [Required]
        public int Id { get; set; }

        [Required]
        public string Nome { get; set; }

        [Required]
        [SkillsValidate(Allowed = new string[] { "ASP.NET Core", "ASP.NET MVC", "ASP.NET Web Forms" }, ErrorMessage = "You skills are invalid")]
        public string Classe { get; set; }

        [Required]
        public string RA { get; set; }

        [Required]
        public DateTime DataNasc { get; set; }
    }

OBSERVAÇÃO: Coloquei o [Required] mas não funciona. Se deixar em branco ele não reclama. Acho que deve ser alguma coisa com o jquery, que deveria ver isso…

E roda legal mas ao consultar o banco para ver se tem alguma informação gravada não aparece. Gostaria da ajuda de vcs no seguinte sentido: colocar em algum ponto uam informação para ver se esta ou não conectando no banco e se esta (conectando) esta gravando.
Caso precisem de mais informações estou a disposição. Desde já obrigado.

4 Respostas

Dragoon

o modo como você fez está errado e por favor tem algum erro, fez algum debug?

R

Como eu disse só erro nesse file no inicio. Depois de acertado com as sugestões do VS2017 ele abriu a página e foi para os campos para inserir as informações e depois não está gravando nada no banco. Onde eu poderia colocar um “teste” para ver se esta:
1º conectando no banco
2º se esta, se ele consegue pelo menos fazer um SELECT antes do INSERT??

Essa ajuda para o debug que eu não estou conseguindo acertar. Obrigado.

R

Consigo agora os erros. Segue:

erro 1

Gravidade	Código	Descrição	Projeto	Arquivo	Linha	Estado de Supressão
Erro		Failed to obtain schema information from database (localdb)\MSSQLLocalDB.Junina.  
Please close any open editors for this database, check your connection to this database, and refresh the database in Server Explorer.		Junina	0	

erro 2

Gravidade	Código	Descrição	Projeto	Arquivo	Linha	Estado de Supressão
Erro		The target database schema could not be retrieved. Lock request time out period exceeded.		Junina	0	


erro 3
Gravidade	Código	Descrição	Projeto	Arquivo	Linha	Estado de Supressão
Aviso	NU1603	jQuery.Validation.Unobtrusive 2.0.20710 depende de Microsoft.jQuery.Unobtrusive.Validation (>= 2.0.20613), mas Microsoft.jQuery.Unobtrusive.Validation 2.0.20613 não foi encontrado. A melhor correspondência aproximada de Microsoft.jQuery.Unobtrusive.Validation 2.0.20710 foi resolvida.	FestaJun	C:\Users\EM Herminia\source\repos\FestaJun\FestaJun\FestaJun.csproj	1

E ainda não consegui ver se esta ou nao conectando. Obrigado desde já.

R

Eu postei os erros e agora surgiu uma outra dúvida: eu criei o banco dentro do Visual Studio 2017 com o SQL Server 2014 instalado. Mas, ao verificar os bancos no Studio Management 18, não aparece lá (não tem o banco muito menos o file .MDF). O VS2017 tem uma instância própria do SQL Server? E ainda, como faço para testar a conexão da minha aplicação ao banco? Tem como implementar uma classe SÓ PARA ISSO? Se estou errando, gostaria de saber onde (por favor). Valeu por enquanto…

Criado 7 de junho de 2019
Ultima resposta 12 de jun. de 2019
Respostas 4
Participantes 2