0
Hello.
When trying to open a connection using the class SqlConnection
of lib SqlClient
my class conexao
- formerly null
- is as follows:
That class conexao
is the type SqlConnection
and receives the return of my static function ConexaoBd.GetConexao()
using System.Data.SqlClient;
using System.Text;
namespace core.Util
{
public class ConexaoBd
{
public static SqlConnection GetConexao()
{
StringBuilder connectionString = new StringBuilder();
connectionString.Append("Data Source=DESKTOP-IUVDEOS;");
connectionString.Append(" ");
connectionString.Append("Initial Catalog=ECommerceGames;");
connectionString.Append(" ");
connectionString.Append("Integrated Security=true;");
return new SqlConnection(connectionString.ToString());
}
}
}
The curious thing is that I can connect to my base via SQL Management Studio and via SQL Server Explorer from Visual Studio normally.
I tried connecting with the connection string of SQL Server Explorer uses, but also could not.
I’ve tried the following connection string variations:
"Data Source=DESKTOP-IUVDEOS; Initial Catalog=Ecommercegames; Integrated Security=true;"
"Data Source=DESKTOP-IUVDEOS; Initial Catalog=Ecommercegames; Integrated Security=SSPI;"
"Data Source=DESKTOP-IUVDEOS SQLEXPRESS; Initial Catalog=Ecommercegames; Integrated Security=true;" "Data Source=DESKTOP-IUVDEOS SQLEXPRESS; Initial Catalog=Ecommercegames; Integrated Security=SSPI;"
"Data Source=DESKTOP-IUVDEOS,1433; Initial Catalog=Ecommercegames; Integrated Security=true;"
"Data Source=DESKTOP-IUVDEOS,1433; Initial Catalog=Ecommercegames; Integrated Security=SSPI;"
I tried to connect as Firewall disabled too, but without success. The SQL Server service is running automatically.
Obs: no connection string in my appsettings.json
.
Use Visual Studio 2019 with ASP.NET Core 2.2 and SQL Server 2017 Express v14.1805.4072.1
I appreciate any guidance.
Edited - I just performed more tests and nothing worked.
using core.Util;
using System;
using System.Collections.ObjectModel;
using System.Data.SqlClient;
namespace Testes
{
public class TesteConexao
{
public static void TestarConexao()
{
Collection<string> stringsConexao = new Collection<string>();
stringsConexao.Add("Data Source=DESKTOP-IUVDEOS; Initial Catalog=ECommerceGames; Integrated Security=true;");
stringsConexao.Add("Server=DESKTOP-IUVDEOS; Database=ECommerceGames;Trusted_Connection=True;");
stringsConexao.Add("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=master;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");
foreach (var item in stringsConexao)
{
SqlConnection conexao = ConexaoBd.GetConexaoTeste(item);
Console.WriteLine("String de conexão: " + conexao.ConnectionString);
Console.WriteLine("Estado da conexão: " + conexao.State);
}
Console.ReadLine();
}
}
}
Exit from testing:
I am conducting the opening of connection and consultation as follows:
using System;
using System.Data.SqlClient;
using dominio;
using dominio.Jogo;
namespace core.Impl.Dao.Jogo
{
public class ProdutoDAO : AbstractDAO
{
public ProdutoDAO():base("Produtos", "ProdutoId")
{
}
public override void Salvar(EntidadeDominio entidade)
{
Produto produto = (Produto) entidade;
string cmdTextoProduto;
string cmdTextoGenero;
string cmdTextoPais;
cmdTextoProduto = "INSERT INTO Produtos(Titulo," +
"Desenvolvedora," +
"ClassificacaoEtaria," +
"DataLancamento," +
"TamanhoEmDisco," +
"Sinopse," +
"RequisitosMinimos," +
"GrupoPrecificacao," +
"Status," +
"DataCadastro" +
") " +
"VALUES(@Titulo," +
"@Desenvolvedora" +
"@ClassificacaoEtaria," +
"@DataLancamento," +
"TamanhoEmDisco," +
"@Sinopse," +
"@RequisitosMinimos," +
"@GrupoPrecificacao," +
"@Status," +
"@DataCadastro" +
")";
SqlCommand comandoProduto = new SqlCommand(cmdTextoProduto);
comandoProduto.Parameters.AddWithValue("@Titulo", produto.Titulo);
comandoProduto.Parameters.AddWithValue("@Desenvolvedora", produto.Desenvolvedora);
comandoProduto.Parameters.AddWithValue("@ClassificacaoEtaria", produto.ClassificacaoEtaria);
comandoProduto.Parameters.AddWithValue("@DataLancamento", produto.DataLancamento);
comandoProduto.Parameters.AddWithValue("@TamanhoEmDisco", produto.TamanhoEmDisco);
comandoProduto.Parameters.AddWithValue("@Sinopse", produto.Sinopse);
comandoProduto.Parameters.AddWithValue("@RequisitosMinimos", produto.RequisitosMinimos);
comandoProduto.Parameters.AddWithValue("@GrupoPrecificacao", produto.GrupoPrecificacao);
comandoProduto.Parameters.AddWithValue("@Status", produto.Status);
comandoProduto.Parameters.AddWithValue("@DataCadastro", produto.DataCadastro);
cmdTextoGenero = "INSERT INTO ProdutosGeneros(ProdutoId," +
"GeneroId," +
") " +
"VALUES(@ProdutoId," +
"@GeneroId" +
")";
SqlCommand comandoGenero = new SqlCommand(cmdTextoGenero);
cmdTextoPais = "INSERT INTO ProdutosPaises(ProdutoId," +
"PaisId," +
") " +
"VALUES(@ProdutoId," +
"@PaisId" +
")";
SqlCommand comandoPais = new SqlCommand(cmdTextoPais);
try
{
Conectar();
BeginTransaction();
int a = comandoProduto.ExecuteNonQuery();
foreach (var item in produto.Generos)
{
comandoGenero.Parameters.AddWithValue("@ProdutoId", produto.Id);
comandoGenero.Parameters.AddWithValue("@GeneroId", item);
int b = comandoGenero.ExecuteNonQuery();
}
foreach (var item in produto.PaisesProibicao)
{
comandoPais.Parameters.AddWithValue("@ProdutoId", produto.Id);
comandoPais.Parameters.AddWithValue("@Pais", item);
int c = comandoPais.ExecuteNonQuery();
}
Commit();
}
catch (SqlException e)
{
Rollback();
throw e;
}
catch (InvalidOperationException e)
{
throw e;
}
finally
{
comandoProduto.Dispose();
comandoGenero.Dispose();
comandoPais.Dispose();
Desconectar();
}
}
}
}
The class below has Open and close connections and transactions methods:
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.SqlClient;
using core.Util;
using dominio;
namespace core.Impl.Dao
{
public abstract class AbstractDAO : IDAO
{
protected SqlConnection conexao;
protected string tabela;
protected string idTabela;
private DbTransaction transacao;
public AbstractDAO(SqlConnection conexao, string tabela, string idTabela)
{
this.tabela = tabela;
this.idTabela = idTabela;
this.conexao = conexao;
}
protected AbstractDAO(string tabela, string idTabela)
{
this.tabela = tabela;
this.idTabela = idTabela;
}
public virtual void Salvar(EntidadeDominio entidade)
{
throw new NotImplementedException();
}
public virtual void Alterar(EntidadeDominio entidade)
{
throw new NotImplementedException();
}
public virtual List<EntidadeDominio> Consultar(EntidadeDominio entidade)
{
throw new NotImplementedException();
}
public void Excluir(EntidadeDominio entidade)
{
string cmdTexto = "DELETE FROM '" + tabela + "' WHERE ProdutoId = '" + idTabela + "'";
SqlCommand comando = new SqlCommand(cmdTexto);
try
{
Conectar();
comando.ExecuteNonQuery();
Commit();
}
catch (DbException e)
{
Rollback();
throw e;
}
finally
{
Desconectar();
comando.Dispose();
}
}
protected void Conectar()
{
try
{
if (conexao == null)
conexao = ConexaoBd.GetConexao();
}
catch (SqlException e)
{
throw e;
}
catch (InvalidOperationException e)
{
throw e;
}
}
protected void Desconectar()
{
if (conexao != null)
{
conexao.Close();
conexao.Dispose();
}
}
public void BeginTransaction()
{
try
{
transacao = conexao.BeginTransaction();
}
catch (DbException e)
{
throw e;
}
}
public void Commit()
{
try
{
transacao.Commit();
}
catch (DbException e)
{
throw e;
}
}
public void Rollback()
{
try
{
transacao.Rollback();
}
catch (DbException e)
{
throw e;
}
}
}
}
The order to open and close connection I be based on this video.
Try with string connection indicating the instance, thus:
"Data Source=.\SQLExpress; Initial Catalog=ECommerceGames; Integrated Security=SSPI;"
– Barbetta