Vra

Ek het 'n ou NET 1.0 webapp wat 'n bietjie van die onderhoud gedoen op dit nodig het. Ek het die motor-opgradeerder gebruik word om dit op te gradeer om NET 3.5 (en ook later probeer 2,0), maar nou kan dit nie meer toegang tot die databasis.

Op die oog af lyk dit na 'n noob verband-string probleem, maar ek dink dit is meer geneig om te wees wat verband hou met 'n paar subtiele probleem van die opgradering.

Ek kry die generiese fout boodskap:

'n Fout het voorgekom terwyl 'n verbinding met die bediener. Wanneer die verbinding met SQL Server 2005, kan hierdie mislukking veroorsaak word deur die feit dat onder die standaard instellings SQL Server nie afgeleë verbindings toelaat. (Verskaffer: Vernoem Pype Verskaffer, fout: 40 - Kan 'n verbinding met SQL Server oopmaak nie)

Die bron-kode is redelik basiese, met geen klokke of fluitjies:

protected static SqlConnection objConn;

objConn = new SqlConnection(strConnectionString);

try
{
    objConn.Open();
}

en probeer dit ook as:

using (objConn = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

Die verband string kom van die Web.config, en die gebruik van die debugger om 'n breek punt te stel en kyk deur die eienskappe van die verband voor dit probeer om dit oop te maak, ek kan sien dat sy gevind dat die verband string behoorlik:

connectionString = "Databron = XXX.XXX.XXX.XXX; Aanvanklike Katalogus = XXXXXX; User ID = XXXXXX, wagwoord = XXXXXX"

'n handvol van die dinge wat ek dink ek het uitgesluit:

Die fout boodskap is dieselfde of verbinding met SQL Server 2005 of SQL Server 2000.

Geen foute of waarskuwings in die VSA Fout Lys.

Die verband string is dieselfde as 'n paar ander webtuistes wat ook dieselfde databasis te gebruik, so ek weet dat die verband string korrek is.

Ek het probeer om dit te koppel van my plaaslike rekenaar (waar ek kan koppel aan die databasisse via SQL Query Analyzer) en uit die normale webbediener, so dit is nie 'n firewall kwessie nie en is nie 'n maksimum-verbindings kwessie.

Dit is die konneksie na IP-adres van die bediener se, so dit is nie 'n rekenaar leser kwessie (en ander webapps fyn kan koppel.

TCP en die naam van pype is die 2 netwerkprotokolle geaktiveer is op die SQL Server.

Voeg "Network Library = DBMSSOCN;" om die verband string die fout boodskap verander om in te sluit "verskaffer: TCP Verskaffer, fout" (daar is iets anders wat ek in die verband string verander die ander dag dat ook gehad wat 'n invloed, maar ek kan dit wat nie nou onthou nie.)

Ek het reeds gekyk het deur 3 ander soortgelyke poste op stapel oorloop:
(Kan nie links lys hier omdat ek 'n nuwe gebruiker, maar hul vraag ID's as iemand anders wil om te skakel na hulle in 'n kommentaar is: 63875, 1038888, 846479)
En hierdie artikel op 'n ander site het 'n paar goeie idees van dinge om te probeer wat nie help nie:
http://weblogs.sqlteam.com/tarad/archive/ 2008/05/23 / 60609.aspx

My beste raaiskoot is dat sy iets wat veroorsaak word deur die opgradering tussen NET weergawes - miskien iets verkeerd in die Web.config

?

Dit is 'n C # app, mooi klein / basiese, maar is verdeel in drie projekte.

Was dit nuttig?

Oplossing

Skryf 'n konsole aansoek dat niks, maar probeer om toegang tot die databasis met behulp van die kode wat jy gepos nie. Hard-kode die verband string in die konsole program.

Met ander woorde, verwyder al die afleiding om seker te maak dat die kern-kode wat jy probeer om werklik uit te voer korrek werk.

Ander wenke

As daar 'n werklike oplossing voorsien vir hierdie probleem was nog nooit, hier is die een wat my gehelp:

Ek het presies dieselfde probleem as ek 'n perfek loop ASP.NET 2.0 aansoek om NET 3.5 opgegradeer. Die web artikels word aangebied deur IIS 5.1 op Windows XP en ek gebruik SQL Server Express 2005 Ek gebruik die volgende verband string in my Web.config:

<add name="myDbConnection" providerName="System.Data.SqlClient" connectionString="Data Source=http://localhost;Server=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True"/>

So as jy sien, ek doen nie TCP-verbinding hier of verbind na 'n afgeleë bediener. Ek is net die koppeling van die SQLEXPRESS byvoorbeeld op die localhost thru vernoem pype. Dis hoekom ek gedink het, dit sal absoluut niks te doen met toelaat afgeleë verbindings op SQL Server 2005, maar as ek uitgevind het, is dit nie! (Ek weet nie die werklike rede hiervoor!) Ek het 'n paar uur om uit te vind wat, so miskien dit help iemand ...

Wat jy hoef te doen (gebruik Google vir die besonderhede):

  1. Laat Plaaslike en remote Connections via SQL Server 2005 Oppervlakarea Configuration Tool (Ek kies die opsie "Gebruik beide TCP / IP en die naam van pype")
  2. Skakel die SQL Server Browser diens
  3. Stel die luister TCP-poort tot 1433 vir alle IPs via SQL Server Configuration Bestuurder Tool
  4. Geniet jou loop web app: -)

Waarom al hierdie is nodig om suksesvol te sluit van 'n NET 3.5 Web App om SQL Server wanneer dit werk reeds vanaf NET 2.0 is buite my!

Volgens hierdie , SQL 2005 het nie gekonfigureer kom om inkomende plaaslike of afgeleë verbindings toelaat en jy moet dit self in staat stel.

Ek is seker jy het die volgende stappe reeds weg, maar ... probeer sodat afgeleë verbinding vir SQL Server en sodat die SQL Server Browser diens. A walk through vir beide kan gevind hier .

Jy kan probeer met 'n ander tipe van verband string. My verband snare word gewoonlik formaat soos:

<add name="DataFrom" connectionString="SERVER=[servername];Database=[dbname];UID=[userid];PWD=[password];"/>

Is die ander applikasie jy gesê wat ook NET werk 3.5 aansoeke?


Ek is ook nuuskierig hoe jy dit reggekry om hierdie stuk kode werk te kry

using (var = new SqlConnection(strConnectionString))
{
    objConn.Open();
    ...
}

Ek dink jy bedoel

using (objConn = new SqlConnection(strConnectionString)) 

reg?

scroll top