MSSQL-fout ‘De onderliggende provider is mislukt bij Open’

Ik gebruikte een .mdfom verbinding te maken met een databaseen entityClient. Nu wil ik de verbindingsreeks wijzigen zodat er geen .mdf-bestand is.

Is de volgende connectionStringcorrect?

<connectionStrings>
   <!--<add name="conString" connectionString="metadata=res://*/conString.csdl|res://*/conString.ssdl|res://*/conString.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\SQL2008;AttachDbFilename=|DataDirectory|\NData.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" 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=&quot;Data Source=.\SQL2008;Initial Catalog=NData;Integrated Security=True;Connect Timeout=30;User Instance=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Omdat ik altijd de foutmelding krijg:

De onderliggende provider is mislukt op Open


Antwoord 1, autoriteit 100%

Ik had deze fout en vond een paar oplossingen:

Als je naar je verbindingsreeks kijkt, ziet deze er geldig uit. Ik vond deze blogpost, het probleem hier is dat ze geïntegreerde beveiliginggebruikten . Als u op IIS draait, heeft uw IIS-gebruiker toegang tot de database nodig.

Als u Entity Frameworkwith Transactions, Entity Framework opent en sluit automatisch een verbinding met elke database-aanroep . Bij het gebruik van transacties probeert u dus een transactie te spreiden over meerdere verbindingen. Dit verheft zich tot MSDTC.

(Zie deze referentie voor meer informatie.)

Het wijzigen van mijn code in het volgende loste het op:

using (DatabaseEntities context = new DatabaseEntities())
{
    context.Connection.Open();
    // the rest
}

Antwoord 2, autoriteit 17%

context.Connection.Open()hielp niet bij het oplossen van mijn probleem, dus ik probeerde “Allow Remote Clients” in DTC-configuratie in te schakelen, geen fout meer.

In Windows 7 kunt u de DTC-configuratie openen door dcomcnfg, Component Services -> Computers -> Mijn computer -> Distributed Transaction Coordinator -> Klik met de rechtermuisknop op Lokale DTC -> Beveiliging.


Antwoord 3, autoriteit 12%

U zou Innerexception moeten zien om te zien wat de innerlijke oorzaak van gooien van
fout is.

In mijn geval was de originele fout:

Kan het fysieke bestand niet openen “D: \ Projects2 \ XCU \ XCU \ APP_DATA \ XCUDATA_LOG.LDF”. Besturingssysteemfout 5: “5 (toegang wordt geweigerd.)”.
Een poging om een ​​automatisch genoemde database voor bestand D: \ Projects2 \ XCU \ XCU \ APP_DATA \ XCUDATA.MDF te bevestigen, is mislukt. Een database met dezelfde naam bestaat of opgegeven bestand kan niet worden geopend of het bevindt zich op UNC Share.

die opgelost is door volledige toestemming te geven aan de huidige gebruiker voor toegang tot gerelateerde mdfen ldfBestanden met behulp van de eigenschappen van bestanden.


4, Autoriteit 11%

Ik vond het probleem dat ik het serverpad binnen de verbindingstreeks had in een van deze varianten:

SERVER\SQLEXPRESS
SERVER

Wanneer echt ik zou moeten hebben:

.\SQLEXPRESS

Om de een of andere reden kreeg ik de foutmelding wanneer het moeite had om het exemplaar van SQL te vinden.


5, Autoriteit 7%

Dit is alleen veel voor algemeen probleem. Zelfs ik heb geconfronteerd met dit probleem. Op de ontwikkelingsmachine, geconfigureerd met Windows-authenticatie, wordt het perfect gewerkt:

<add name="ShoppingCartAdminEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.\SQlExpress;initial catalog=ShoppingCartAdmin;Integrated Security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Eenmaal gehost in IIS met dezelfde configuratie, kreeg ik deze fout:

De onderliggende provider is mislukt op Open

Het was opgelost door connectionStringin het configuratiebestand te wijzigen:

<add name="MyEntities" connectionString="metadata=res://*/ShoppingCartAPIModel.csdl|res://*/ShoppingCartAPIModel.ssdl|res://*/ShoppingCartAPIModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MACHINE_Name\SQlExpress;initial catalog=ShoppingCartAdmin;persist security info=True;user id=sa;password=notmyrealpassword;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Andere veelvoorkomende fouten kunnen zijn:

  1. Databaseservice kan worden gestopt
  2. Databronkenmerken die verwijzen naar een lokale database met Windows-authenticatie en gehost in IIS
  3. Gebruikersnaam en wachtwoord kunnen verkeerd zijn.

Antwoord 6, autoriteit 5%

Als u deze uitzondering ontvangt, zorg er dan voor dat u de details uitbreidt en de details van de innerlijke uitzonderingbekijkt, aangezien deze details geeft over waaromhet inloggen is mislukt. In mijn geval bevatte de verbindingsreeks een gebruiker die geen toegang had tot mijn database.

Ongeacht of u Integrated Security (de context van de ingelogde Windows-gebruiker) of een individueel SQL-account gebruikt, zorg ervoor dat de gebruiker onder ‘Beveiliging’ de juiste toegang heeft tot de database die u probeert te openen om dit probleem te voorkomen .


Antwoord 7, autoriteit 2%

Ik had een soortgelijk probleem met de SQL Server Express editie op Windows Server 2003 . Ik heb gewoon de netwerkservice toegevoegd als een gebruiker in de database-beveiliging.


8, Autoriteit 2%

De SQL Server Express-service is TOSTART niet automatisch ingesteld.

1) Ga naar het bedieningspaneel
2) Administratieve tools
3) Service
4) Stel SQL Server Express in om automatisch te starten door erop te klikken
5) Klik met de rechtermuisknop en start en start de service

Ik hoop dat dat zal helpen.


9

Dit kan ook gebeuren als u een database herstelt en de gebruiker al bestaat met een ander schema, waardoor u de juiste machtigingen niet kunt toewijzen.

Om deze uitloop te corrigeren:

USE your_database
EXEC sp_change_users_login 'Auto_Fix', 'user', NULL, 'cf'
GO
EXEC sp_change_users_login 'update_one', 'user', 'user'
GO

10

Ik heb hier een soortgelijk probleem gepost, met een SQL 2012 DB gehost op Amazon RDS. Het probleem was in de verbindingsstring – ik had “applicatienaam” en “app” eigenschappen daarin. Zodra ik die heb verwijderd, werkte het.

Entity Framework 5 en Amazon RDS – “De onderliggende provider is niet geopend.”


11

Zorg ervoor dat elke elementwaarde in de aansluitreeks wordt geleverd correct is. In mijn geval kreeg ik dezelfde fout omdat de naam van de catalogus (databasenaam) die is opgegeven in de verbindingstekenreeks onjuist was.


12

Ik had een soortgelijk probleem met uitzonderingen vanwege de verbindingsstatus, en toen realiseerde ik me dat ik mijn domeinserviceklasse-variabele had gemarkeerd als statisch (per ongeluk).

Mijn gok is dat zodra de servicebibliotheek in het geheugen is geladen, elke nieuwe oproep dezelfde statische variabelewaarde (domeinservice-instantie) gebruikt, waardoor er conflicten ontstaan via de verbindingsstatus.

Ik denk ook dat elke klantaanroep resulteerde in een nieuwe thread, dus meerdere threads die toegang hebben tot dezelfde domeinservice-instantie, staat gelijk aan een treinwrak.


Antwoord 13

Ik had hetzelfde probleem, maar wat voor mij werkte, was het verwijderen van dit uit de Connection String:

persist security info=True


Antwoord 14

Ik had een soortgelijke fout met de innerlijke uitzondering zoals hieronder:

bewerking is niet geldig voor de status van de transactie

Ik zou het kunnen oplossen door DTC-beveiligingsinstellingen in te schakelen.

Ga naar Eigenschappen van DTC, onder het tabblad Beveiliging, vink het onderstaande aan

  • Netwerk DTC-toegang
  • Sta externe clients toe
  • Communicatie met transactiemanager
  • Inkomend toestaan
  • Uitgaand toestaan

Antwoord 15

Als u deze fout op een ASP.NET-webtoepassing krijgt, controleer dan naast de andere genoemde zaken het volgende:

  1. Beveiligingsmachtigingen voor databasegebruikers (welke gebruikers toegang hebben tot uw database.
  2. Controleer uw applicatiepool in IIS en zorg ervoor dat het de juiste is die toegang heeft tot uw database.

Antwoord 16

Ik heb dit verholpen door IISte resetten, maar nog steeds Integrated Authenticationin de verbindingsreeks.


Antwoord 17

Een nieuwe Windows firewall regel voor SQL & NBSP; Server (en voor poort 1433) op het servermachine lost deze fout op (als uw servernaam, gebruikersaanmelding naam of wachtwoord niet verkeerd is in uw verbinding string …).


18

Een veelgemaakte fout die ik deed omdat ik de toepassing van eenmaal pc naar het andere was en geen van de bovenstaande werkte was dat ik het vergat om de verbindingstekenreeks naar zowel app.config en web.config te kopiëren!


19

Ik had een soortgelijk probleem: in mijn executies met testcases heb ik altijd deze fout. Ik kwam erachter dat mijn “gedistribueerde transactieservice” niet is gestart (run: Services.msc – & GT; Start “Distributed Transaction Service” (het beste om het in te stellen om automatisch te starten)). Nadat ik dat deed, werkte het als een charme …


20

Ik was ook geconfronteerd met hetzelfde probleem. Nu heb ik het gedaan door de gebruikersnaam en het wachtwoord uit de verbindingstekenreeks te verwijderen.


21

Voor mij was het gewoon een eenvoudige fout:

Ik gebruikte Amazon EC2 , en ik gebruikte mijn elastische IP-adres in de verbindingstekenreeks, maar Toen ik IP-adressen heb gewijzigd, ben ik vergeten mijn verbindingsreeks bij te werken.


22

Ik had deze fout plotseling buiten het blauw op een van onze sites. In mijn geval bleek het dat het wachtwoord van de SQL-gebruiker was verlopen! Als u de expiratie-doos voor het wachtwoord in deed de truc!


23

Ik had een paar dagen geleden hetzelfde probleem toen ik “Integrated Security=True;” gebruikte. in de verbindingsreeks moet u de identiteit van de toepassingsgroep uitvoeren onder “localsystem”. Dit wordt natuurlijk niet aanbevolen, maar voor testen is het voldoende.

Zo kunt u de identiteit in IIS 7 wijzigen:
http://www.iis.net/learn/manage/configure -security/application-pool-identities


Antwoord 24

Stel in IISde App Pool IdentityAs Service Account-gebruiker of Administrator-account of ant-account in die toestemming heeft om de bewerking op die DataBase uit te voeren.


Antwoord 25

In mijn geval kwam ik niet overeen tussen de naam van de verbindingsreeks die ik registreerde in de constructor van de context en de naam in mijn web.config. Simpele fout veroorzaakt door kopiëren en plakken 😀

   public DataContext()
        : base(nameOrConnectionString: "ConnStringName")
    {
        Database.SetInitializer<DataContext>(null);
    }


Antwoord 26

Ik had dit probleem omdat de aanmelding bij de toepassingsgroep waarmee deze app werd uitgevoerd, was gewijzigd.

In IIS:

  • Vind de applicatiepool door op uw site te klikken en naar Basisinstellingen te gaan.

  • Ga naar Application Pools.

  • Klik op de applicatiepool van uw site.

  • Klik op Geavanceerde instellingen.

  • Voer in Identiteit de gebruikersnaam en het wachtwoord van het account in.

  • Start uw site opnieuw en probeer het opnieuw.


Antwoord 27

GEEN van de antwoorden werkte voor mij

Ik denk dat sommigen van ons allemaal domme fouten maken, er zijn 100 manieren om te falen …

Mijn probleem was een nieuw project, ik heb alle configuratie in een ander project ingesteld, maar de beller was een Web Api-project waarin ik dezelfde verbindingsreeks in het Web API-project moest kopiëren.

Ik denk dat dit gek is, aangezien ik niet eens dbcontext of iets anders van de web-api aan het vernieuwen was.

Anders probeerde de klassenbibliotheek te zoeken naar een database met de naam

TokenApi.Core.CalContext   

waarvan mijn project TokenApi.Coreheet en de CalContextde naam is van de verbindingsreeks en de bestandsnaam


Antwoord 28

Ik heb het op deze manier opgelost.

Stap 1:
Open Internet Information Service Manager

Stap 2:
Klik op Application Pools in de linkernavigatiestructuur.

Stap 3:
Selecteer uw versie Pool. In mijn geval gebruik ik ASP .Net v4.0. Als je deze versie niet hebt, selecteer dan DefaultAppPool.

Stap 4:
Klik met de rechtermuisknop op stap 3 en selecteer geavanceerde instellingen.

Stap 5:
Selecteer Identiteit in het eigenschappenvenster en klik op de knop om de waarde te wijzigen.

Stap 6:
Selecteer Lokaal systeem in de combobox voor ingebouwde accounts en klik op ok.
Dat is het. Voer nu uw toepassing uit. Alles werkt goed.

Codeproject-oplossing: de- onderliggende-provider-failed-on-open


Antwoord 29

Ik zocht op internet naar dit probleem. Ik had de verkeerde naam in de verbindingsreeks, controleer de verbindingsreeks in web.config. Ik had name="AppTest"maar het had name="App"moeten zijn.

In mijn AppTestContext.cs-bestand had ik:

public AppTestContext() : this("App") { }

Verkeerde verbindingstekenreeks:

<add connectionString="Data Source=127.0.0.1;Initial Catalog=AppTest;Integrated Security=SSPI;MultipleActiveResultSets=True" name="AppTest" providerName="System.Data.SqlClient" />

Rechtsverbindingsstring:

<add connectionString="Data Source=127.0.0.1;Initial Catalog=AppTest;Integrated Security=SSPI;MultipleActiveResultSets=True" name="App" providerName="System.Data.SqlClient" />

Other episodes