Fout in SQL-verbinding in LINQ-naar-SQL

Ik ben bezig met het klonen van een lokale C# -SQL Windows Forms-applicatie naar een nieuwe laptop. Ik heb het C# -project met succes gekloond en de SQL-database met back-ups en herstel hersteld naar de nieuwe machine, maar het nieuwe project kan geen gegevens uit de nieuwe, gekloonde SQL-database lezen/opvragen.

Aangezien de SQL DB lokaal is, is de LINQ-naar-SQL-adressering enigszins anders omdat de computer een andere naam heeft. Dus ik heb de SQL-tabelrepresentaties uit de bestaande LINQ .dbml-grafische interface verwijderd, de oude serververbinding uit de Server Explorer verwijderd, de nieuwe serververbinding toegevoegd en de tabelobjecten geklikt en gesleept vanuit het nieuwe Data Connection-object van de Server Explorer naar het nu lege .dbml-bestand.

Bij het opnieuw opbouwen en uitvoeren van de toepassing in de foutopsporingsmodus, vond ik dat de vervolgkeuzemenu's die uit de SQL DB komen leeg zijn. Bij het uitproberen van een knopfunctie die uit de database haalt, krijg ik de volgende foutmelding:

SqlException was unhandled A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

(De gekloondeSQL-serveris geconfigureerd voor externe verbindingen, TCP/IP is ingeschakeld in SQL en de originele C# -SQL-toepassing werkt probleemloos.)

1

2 antwoord

Controleer uw Web.Config en zorg ervoor dat uw verbindingsreeks correct is ingesteld. Controleer ook om ervoor te zorgen dat wanneer u uw DataContext initialiseert dat u de juiste verbindingsreeks uit uw Web.Config gebruikt.

Soms wanneer u dbs uit de dbml verwijdert, wordt de web.config van de oude items niet volledig gewist. Zoek naar een regel als deze in je designer.cs-bestand:

public SomeDbDataContext() : 
            base(global::System.Configuration.ConfigurationManager.ConnectionStrings["SomeDbConnectionString"].ConnectionString, mappingSource)
    {
        OnCreated();
    }

Vergelijk het met de connectionStrings in uw web.config



 


2
toegevoegd
Nee niet verwijderen. Zorg ervoor dat OnCreated() de juiste verbindingsreeks uit Web.Config gebruikt. Ik heb mijn antwoord bijgewerkt om te laten zien hoe het eruit kan zien. Als u de oude verbindingsreeks gebruikt, moet u gewoon de lijn bijwerken.
toegevoegd de auteur Rondel, de bron
Wanneer ik dat soort lijn vind, moet ik het dan verwijderen?
toegevoegd de auteur Jack Huang, de bron
Ik kan geen Web.config vinden voor mijn C# -project (ik vond er twee voor mijn SQL-server, maar ze hebben geen specificatie voor ConnectionString). Ik vond echter een designer.cs regel die dit zegt: public DataClasses1DataContext (): base (global :: TradingSystem2.Properties.Settings.Default.PJMC & zwnj; onnectionString1, mappingSource) {OnCreated (); }
toegevoegd de auteur Jack Huang, de bron
In de definitie van het PJMConnectionString1-object is de parameter database correct: ik heb gekeken naar de definitie van het PJMConnectionString1-object en deze bevat het juiste database-adres: [global :: ... DebuggerNonUserCodeAttribute ()] [global :: ... ConnectionString)] [global :: System.Configuration.DefaultSettingValueAttribute ("& zwnj; Data Source = ZUOXIANG-HP \\ ENERGY; Initiële catalogus = PJM; Integrated Security = True")] public string PJMConnectionString1 {get {return ((string) (merk [ "PJMConnectionString1"])); }}
toegevoegd de auteur Jack Huang, de bron
Ook is er geen Web.config voor het originele, volledig functionele C# -project dat ik deze huidige heb gekloond, dus het lijkt niet alsof het ontbreken van een Web.config zelf het probleem is.
toegevoegd de auteur Jack Huang, de bron
Als ik de huidige DBML-set verwijder, voeg dan een nieuw LINQ-naar-SQL klasseobject toe aan mijn project en sleep de databasetabellen van de Server Explorer naar het nieuwe Dbml-bestand, mocht mijn project dit kunnen om verbinding te maken met mijn database via de verse .dbml?
toegevoegd de auteur Jack Huang, de bron

Ik zou een paar dingen controleren:

1) Is SQL Server op de nieuwe computer gestart?

2) Is de firewall geconfigureerd om SQL-verbindingen toe te staan?

3) Is het clientverbindingsmechanisme (named pipes, tcp/ip) ook geconfigureerd in SQL Server.

4) Is er een geldige netwerkverbinding in de nieuwe machine (we hadden veel problemen op laptops wanneer deze niet op het netwerk waren aangesloten).

U kunt veel meer geluk hebben als u de naam van de SQL Server-machine wijzigt in . of (lokaal) als u de DB altijd op dezelfde computer geïnstalleerd wilt hebben als de app.

1
toegevoegd
@JackHuang: Sorry, ik bedoelde de naam van de server die is opgegeven in de verbindingsreeks in uw app.
toegevoegd de auteur competent_tech, de bron
1. Ja; 2. Ja; 3. TCP/IP is ingeschakeld, Named Pipes niet, maar toen ik Named Pipes inschakelde, startte mijn SQL Server-instantie niet; 4. De database is volledig lokaal op de harde schijf van de laptop; Wanneer u zegt "de naam van de SQL Server-machine wijzigen", bedoelt u de netwerknaam van de laptop of iets dat is opgegeven in SQL Server-configuratie?
toegevoegd de auteur Jack Huang, de bron