Eu estava usando um .mdf
para conectar a um database
e entityClient
. Agora eu quero alterar a cadeia de conexão para que não haja .mdf
arquivo.
O seguinte está connectionString
correto?
<connectionStrings>
<!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />-->
<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
Porque eu sempre recebo o erro:
O provedor subjacente falhou em Abrir
c#
sql-server
entity-framework
database-connection
senzacionale
fonte
fonte
Integrated Security
a string de conexão, criei um usuário e verifiquei se ele tinhasysadmin
permissões e adicionei esse usuário à string de conexão.Respostas:
Eu tive esse erro e encontrei algumas soluções:
Olhando para a sua cadeia de conexão, ela parece válida. Encontrei este post no blog , o problema aqui é que eles estavam usando a Segurança Integrada . Se você estiver executando no IIS, seu usuário do IIS precisará acessar o banco de dados.
Se você estiver usando o Entity Framework with Transactions , o Entity Framework abrirá e fechará automaticamente uma conexão com cada chamada ao banco de dados. Portanto, ao usar transações, você está tentando espalhar uma transação por várias conexões. Isso eleva para MSDTC .
( Consulte esta referência para obter mais informações. )
Alterar meu código para o seguinte corrigiu:
fonte
context.Connection.Open()
não ajudou a resolver o meu problema, tentei ativar "Permitir clientes remotos" na configuração do DTC, sem mais erros.No Windows 7, você pode abrir a configuração do DTC executando dcomcnfg, Serviços de componentes -> Computadores -> Meu computador -> Coordenador de transações distribuídas -> Clique com o botão direito do mouse em DTC local -> Segurança.
fonte
Você deve ver innerException para ver qual é a causa interna do lançamento do erro.
No meu caso, o erro original foi:
que foi resolvido dando permissão total ao usuário atual para acessar arquivos
mdf
e relacionadosldf
usando as propriedades dos arquivos.fonte
Achei que o problema era que eu tinha o caminho do servidor dentro da cadeia de conexão em uma destas variantes:
Quando realmente eu deveria ter:
Por algum motivo, recebi o erro sempre que havia dificuldade em localizar a instância do SQL.
fonte
Este é apenas um problema comum. Até eu já enfrentei esse problema. Na máquina de desenvolvimento, configurada com autenticação do Windows, ela funciona perfeitamente:
Uma vez hospedado no IIS com a mesma configuração, recebi este erro:
Foi resolvido alterando
connectionString
o arquivo de configuração:Outros erros comuns podem ser:
fonte
Integrated Security=True
e substitua-o poruser id=sa;password=notmyrealpassword
para corrigir esse problema de implantação.Ao receber esta exceção, certifique-se de expandir os detalhes e observe os detalhes internos da exceção, pois ela fornecerá detalhes sobre por que o logon falhou. No meu caso, a cadeia de conexão continha um usuário que não tinha acesso ao meu banco de dados.
Independentemente de você usar a Segurança Integrada (o contexto do Usuário Windows logado) ou uma conta SQL individual, verifique se o usuário tem acesso adequado em 'Segurança' ao banco de dados que você está tentando acessar para evitar esse problema.
fonte
inner exception
é o problema do estado? Essa foi a minha resposta aqui, que fornecerá os detalhes adicionais ocultos necessários para entender o verdadeiro problema subjacente. Oinner exception
não verificará se você tem o logon correto - é uma exceção, não um esclarecimento.Login failed for user 'user'.
NT AUTHORITY\NETWORK SERVICE
à lista de usuários do SQL Server. Eu ainda tenho a mesma falha de login rejeitada.data source
parahostname\SQLEXPRESS
. Eu tinha tentadohostname
e.\SQLEXPRESS
anteriormente. Então, consegui me conectar com a segurança integrada. Curiosamente, esse é o oposto da resposta de dooburt . Mais curioso, o nome de usuário do SQL Server nunca conseguiu se conectar a partir do Visual Studio.Eu tive um problema semelhante com o SQL Server Express Edition no Windows Server 2003 . Simplesmente adicionei o serviço de rede como usuário na segurança do banco de dados.
fonte
O serviço SQL Server Express não foi definido para iniciar automaticamente.
1) Vá para o painel de controle 2) Ferramentas administrativas 3) Serviço 4) Configure o SQL Server express para iniciar automaticamente clicando nele 5) Clique com o botão direito do mouse e inicie o serviço
Espero que ajude.
fonte
Isso também pode acontecer se você restaurar um banco de dados e o usuário já existir com um esquema diferente, deixando-o incapaz de atribuir as permissões corretas.
Para corrigir esta execução:
fonte
Publiquei um problema semelhante aqui, trabalhando com um banco de dados SQL 2012 hospedado no Amazon RDS. O problema estava na cadeia de conexão - eu tinha "Nome do aplicativo" e "Aplicativo" . Depois que eu os removi, funcionou.
Entity Framework 5 e Amazon RDS - "O provedor subjacente falhou no Open".
fonte
Verifique se cada valor do elemento na cadeia de conexão que está sendo fornecida está correto. No meu caso, estava recebendo o mesmo erro porque o nome do catálogo (nome do banco de dados) especificado na cadeia de conexão estava incorreto.
fonte
Eu tive um problema semelhante com exceções devido ao estado da conexão e percebi que minha variável de classe de serviço de domínio foi marcada como estática (por engano).
Meu palpite é que, uma vez que a biblioteca de serviço é carregada na memória, cada nova chamada acaba usando o mesmo valor de variável estática (instância de serviço de domínio), causando conflitos por meio do estado da conexão.
Penso também que cada chamada de cliente resultou em um novo thread, de modo que vários threads acessando a mesma instância de serviço de domínio foram equivalentes a um acidente de trem.
fonte
Eu tive o mesmo problema, mas o que funcionou para mim foi remover isso da seqüência de conexão:
persist security info=True
fonte
Eu tive um erro semelhante com a exceção interna como abaixo:
Eu poderia resolvê-lo ativando as configurações de segurança do DTC.
Vá para Propriedades do DTC, na guia Segurança, verifique o abaixo
fonte
Se você receber esse erro em um aplicativo Web ASP.NET, além de outras coisas mencionadas, verifique o seguinte:
fonte
Eu me livrei disso redefinindo o IIS , mas ainda usando
Integrated Authentication
a string de conexão.fonte
A definição de uma nova regra do Firewall do Windows para o SQL Server (e para a porta 1433) na máquina do servidor resolve esse erro (se o nome do servidor, o nome de login do usuário ou a senha não estiverem incorretos na cadeia de conexão ...).
fonte
Um erro comum que eu cometi porque estava movendo o aplicativo de um PC para outro e nenhum dos itens acima funcionou foi que eu esqueci de copiar a cadeia de conexão para App.Config e Web.Config!
fonte
Eu tive um problema semelhante: nas execuções de meus casos de teste, sempre recebia esse erro. Descobri que meu "Serviço de Transação Distribuída" não foi iniciado (execute: services.msc -> start "Serviço de Transação Distribuída" (melhor configurá-lo para iniciar automaticamente)). Depois que fiz isso, funcionou como um encanto ...
fonte
Copiei os arquivos do banco de dados (.mdf / .ldf) para a pasta App_Data para se livrar dessa exceção.
fonte
Eu também estava enfrentando o mesmo problema. Agora eu fiz isso removendo o nome de usuário e a senha da string de conexão.
fonte
Para mim, foi apenas um simples erro:
Usei o Amazon EC2 e meu endereço IP elástico na cadeia de conexão, mas quando mudei os endereços IP, esqueci de atualizar minha cadeia de conexão.
fonte
De repente, ocorreu esse erro inesperadamente em um de nossos sites. No meu caso, descobriu-se que a senha do usuário SQL expirou! Desmarcar a caixa de expiração de senha no SQL Server Management Studio fez o truque!
fonte
Eu tive o mesmo problema há alguns dias, usando "Segurança Integrada = True;" na cadeia de conexão, você precisa executar a identidade do pool de aplicativos em "sistema local". Certamente isso não é recomendado, mas, para testar, ele faz o trabalho.
É assim que você pode alterar a identidade no IIS 7: http://www.iis.net/learn/manage/configuring-security/application-pool-identities
fonte
Em IIS definir o App Identidade do Pool de usuário Conta de Serviço como ou conta de administrador ou conta de formiga que tem permissão para fazer a operação no banco de dados.
fonte
No meu caso, havia uma incompatibilidade entre o nome da cadeia de conexão que estava registrando no construtor do contexto e o nome no meu web.config. Erro simples causado por copiar e colar: D
fonte
Eu tenho o mesmo erro que encontrei quando altero minha connectionString para nova fonte de dados. Eu esqueço de alterar o nome de usuário e a senha do novo banco de dados
fonte
Também ocorreu esse erro se o nome da instância do SQL Server não for especificado e o host SQL tiver várias instâncias do SQL instaladas. Aqui estão alguns exemplos para esclarecer:
A cadeia de conexão abaixo resulta na exceção "O provedor subjacente falhou ao abrir" sem exceção interna em um aplicativo .NET WebForms:
A seguinte cadeia de conexão é executada conforme o esperado em um aplicativo .net WebForms em que o ambiente SQL possui várias instâncias. Raro eu sei, mas tenho algumas instâncias SQL diferentes na minha caixa de desenvolvimento para acomodar projetos diferentes:
fonte
no meu caso, o endereço do servidor foi alterado pelo administrador do servidor, então tive que alterar a cadeia de conexão para o novo endereço do servidor
fonte
Eu tive esse problema porque o login no Pool de aplicativos em que este aplicativo estava sendo executado havia sido alterado.
No IIS:
Encontre o pool de aplicativos clicando em seu site e acessando Configurações básicas.
Vá para Pools de aplicativos.
Clique no pool de aplicativos do seu site.
Clique em Configurações avançadas.
Em Identidade, insira o login e a senha da conta.
Reinicie seu site e tente novamente.
fonte