Gå til innhold

Får ikke koblet til database


Anbefalte innlegg

Skrevet

Kjører et lite nazistyre på serveren min, med minimalt med porter åpent.

 

Det står og kjører en Sql Server Express der, med en database. Bruker følgende connection string: "Data Source=localhost;Initial Catalog=Invoice;Persist Security Info=True;User ID=<user>;Password=<password>"

 

Denne bør da ikke ha noe med porter på nettverkskortet å gjøre, da det ikke skal bli noe innkommende trafikk her?

 

Feilmeldingen er i alle fall: "An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)"

 

brukeren jeg prøver å koble til med er db_owner, så det bør ikke være noe problem der. Noen forslag til neste skritt? Føler jeg står litt på bar bakke her :p

Videoannonse
Annonse
Skrevet

Problemet klienten bruker Named Pipes protokollen for å koble deg til SQL Serveren.

Det første du bør gjøre er å starte SQL Server Configuration Manager og forsikre deg om at TCP/IP protokollen er enablet. Det er også greit om Shared Memory er enablet hvis du logger deg på SQL Serveren lokalt. Named Pipes og VIA kan du disable.

For å tvinge klienten til å bruke TCPIP mot SQL Serveren skriver du "tcp:servernavn" og connection strengen for servername.

Skrevet

Når jeg bruker tcp:servernavn så fikk jeg denne morsomme feilmeldingen:

 

"An error has occurred while establishing a connection to the server. When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server does not allow remote connections. (provider: TCP Provider, error: 0 - No connection could be made because the target machine actively refused it.)"

 

Kan jeg ikke bruke NamedPipes til å koble meg på lokalt?

Skrevet

Joda, du kan fint bruke named pipes.

 

Nå ser jeg dessuten hva som er feil. Nå du bruker SQL Server Express må servernavn være localhost/SQLEXPRESS.

 

"Data Source=localhost\SQLEXPRESS;Initial Catalog=Invoice;Persist Security Info=True;User ID=<user>;Password=<password>"

Skrevet

Takker. Der fikk jeg i alle fall koblet til :)

 

Det som nå er det rare er at ingen av spørringene fungerer :p

 

"SELECT * FROM Employee" gir meg bare "Invalid object name 'Employee'."

 

Stod tidligere "SELECT * FROM dbo.Employee", men fikk strengt tatt samme feilmelding da.

Skrevet

Siden du kobler deg til en localhost vil det beste være å bruke Shared Memory, og det mener jeg skal være default når Data Source=localhost.

 

Prøv å disable alle andre protokoller enn Share Memory.

 

Du kan dessuten se hvilken protokoll som brukes av din connection ved å kjøre

select * from sys.dm_exec_connections

Finn din session_id og sjekk hav som står i kolonnen net_transport.

Skrevet

Hmm. Du er sikker på at det ikke er andre instanser av SQL Server innstallert?

 

Kjør select *

from sys.databases

. Finner du din database der?

Hvis ja, kjør

select db_name()

Er du i riktig database context?

Hvis ja, kjør

select * from sys.tables

Finner du tabellen din der?

Hvis ja, sjekk at brukeren har rettigheter til å lese fra tabellen. Er tabellen opprettet med skjema dbo som eier?

 

 

net_transport=Shared memory

 

Det er bra.

Skrevet
Hmm. Du er sikker på at det ikke er andre instanser av SQL Server innstallert?

 

Kjør select *

from sys.databases

. Finner du din database der?

Ja

Hvis ja, kjør
select db_name()

Er du i riktig database context?

SELECT db_name() gav meg "master"...

Skrevet

Da er du i feil database context. Er du sikker på at databasen heter Invoice? Det er ikke noe skriveleifer ute å går? F.eks. at det skal være Invoices eller noe i den duren.

 

Hvis du er helt sikker på at databasenavn er skrevet riktig så kan du gjøre to ting. Enten kjøre "USE Invoice" for å bytte databse context for din conenction, eller du kan sette default database til Invoice for brukeren enten i SSMS eller ved å kjøre

ALTER LOGIN login_name WITH DEFAULT_DATABASE=Invoice

Skrevet

Testet forresten igjen...

 

SELECT * FROM sys.databases -> Ja, den ligger i listen

SELECT db_name() -> Invoice

 

Jeg tipper feilen her ligger i schemas..

 

Ved nærmere ettersyn ser jeg at alle tabellene har "manfred" som schema :whistle:

Skrevet

...og selvfølgelig funket alt når jeg brukte manfred.Tabellnavn :p Hehe

 

Så et siste spørsmål før jeg slutter å mase: Er det en måte jeg kan gjøre slik at jeg slipper å skrive manfred.Tabellnavn, dbo.Tabellnavn eller lignende i alle spørringer?

Skrevet
...og selvfølgelig funket alt når jeg brukte manfred.Tabellnavn :p Hehe

 

Så et siste spørsmål før jeg slutter å mase: Er det en måte jeg kan gjøre slik at jeg slipper å skrive manfred.Tabellnavn, dbo.Tabellnavn eller lignende i alle spørringer?

 

Du må sørge for at databasebrukeresn default schema er manfred eller hva du nå bruker.

ALTER USER username WITH DEFAULT_SCHEMA=manfred

 

Hvis objektet ikke ligger i ditt default schema så må du spesifisere schema-navn i spørringene.

Skrevet

kan jeg endre alle tabellene, slik at de får et annet default schema da?

 

Vet jeg har kjørt noen slike spørringer før, men har det ikke i hodet i alle fall.

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...