2009-06-15 18 views
5

Mam zainstalowany SQL Server Express 2008 na jednej z moich maszyn i próbuję ustanowić zdalne połączenie ... kiedy używam MS SQL Server Management Studio mogę zalogować się do baza danych bez żadnych problemów (z tym samym mandatów), ale gdy próbuję utworzyć ciąg połączenia w moim C# aplikacji otrzymuję wyjątek:C# 2008 SQL Server Express Connection String

związanych z siecią lub specyficzne dla instancji wystąpił błąd podczas nawiązywania połączenie z serwerem SQL. Serwer nie został znaleziony lub nie był dostępny. Sprawdź, czy nazwa instancji jest poprawna i czy i że serwer SQL jest skonfigurowany do zezwalania na zdalne połączenia .

Oto co mój ciąg połączenia wygląda (informacja prywatna ulega zmianie):

"Data Source="MACHINENAME\\SQLEXPRESS";User ID="Admin";Password="the_password";Initial Catalog="MyDatabase";Integrated Security=True;Connect Timeout=120"); 

Jak powiedziałem, mogę się zalogować przy użyciu Management Studio z tymi samymi ustawieniami: sam identyfikator użytkownika , hasło i nazwę źródła danych, ale nie powiedzie się, gdy spróbuję otworzyć połączenie z powyższym ciągiem połączenia.

Uwaga:

  1. I umożliwiły zdalną łączność na serwerze wyłączone połączenia firewall włączony protokół TCP/IP do serwera, włączył SQL Browser.

  2. Ciąg połączenia działa poprawnie, gdy jestem na tym samym komputerze.

  3. Sprawdziłem opcję Zintegrowane zabezpieczenia i ustawiłem ją na wartość false, aby upewnić się, że nie próbuje ona korzystać z logowania do systemu Windows, ale nadal nie działa.

  4. Baza danych została skonfigurowana tak, aby zezwalać zarówno na logowanie do systemu Windows, jak i na logowanie do bazy danych.

  5. Zmieniając opcję Zintegrowane bezpieczeństwo na SSPI, Prawda i na końcu Fałsz, wszystkie 3 dały mi ten sam błąd, co powyżej.

Czy ktoś może mi powiedzieć, czy robię coś nie tak?

UPDATE, tu jest mój dokładny kod (tym razem tylko hasło zostanie usunięte, a Dodałem zdjęcie Management Studio działa na tej samej maszynie):

string _connectionString = 
      //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Connect Timeout=120", // Same problem 
      //string.Format("Server=%s;User ID=%s;Password=%s;Database=%s;Integrated Security=False;Connect Timeout=120", // Same problem 
      string.Format("Data Source=%s;User ID=%s;Password=%s;Initial Catalog=%s;Integrated Security=False;Connect Timeout=120", // Same problem 
      "GANTCHEVI\\SQLEXPRESS", 
      "FinchAdmin", 
      "the_password", 
      "Finch"); 

Connected Via Management Studio: See Picture http://s113.photobucket.com/albums/n202/ozpowermo/?action=view&current=ManagementStudio.jpg

http://s113.photobucket.com/albums/n202/ozpowermo/?action=view&current=ManagementStudio.jpg

I zdobione:

Podczas korzystania th Etykieta "Data Source =" powinna używać "Identyfikatora użytkownika", jeśli używasz identyfikatora użytkownika, wygląda na to, że nie działa!

string _connectionString = "Data Source=GANTCHEVI\\SQLEXPRESS;Initial Catalog=Finch;Integrated Security=False;User Id=FinchAdmin;Password=the_password;Connect Timeout=0";" 

Odpowiedz

11

Remove Integrated Security = True ze swojego ciągu połączenia i (opcjonalnie) add Persist Security Info = True;

Od MSDN:

Integrated Security - Kiedy fałszywy, ID użytkownika i hasło podane są w związku. W przypadku wartości true bieżące poświadczenia konta systemu Windows są używane do uwierzytelniania.

+0

+1 Nicea Wyjaśnienie. – Praveen

0

Co zrobić, jeśli używasz Zintegrowanego zabezpieczenia = SSPI?

Jeśli nie chcesz używać logowania do systemu Windows, uważam, że druga odpowiedź na temat usuwania parametru Integrated Security jest poprawna.

1

Ok - Domyślam wypróbowaniu wszystkich tych http://blogs.msdn.com/sqlexpress/archive/2005/05/05/415084.aspx

Czy próbowałeś SQLPing na MachineName \ SQLEXPRESS

można ping MachineName

Wreszcie, jestem pewien, że tylko potrzebujesz 1 ukośnika, tj. MACHINENAME \ SQLEXPRESS

+0

Dzięki za odpowiedź :) Tak, już włączyłem wszystkie te ustawienia i mogę połączyć się z bazą danych za pomocą Management Studio, obecnie jestem połączony z Management Studio. Mogę pingować MACHINENAME i zwraca 192.168.0.9 (adres urządzenia podłączonego do mojego routera). To dwa ukośniki, gdy znajduje się w ciągu znaków, ponieważ ukośnik jest traktowany jako znak specjalny. – Kiril

+0

Tak, całkowicie poprawne na dwóch ukośnikach, myślałem, że to w config. Doh! –

1

Może to być Twoja instancja SQL nie jest skonfigurowana do przyjmowania przychodzących połączeń TCP, możesz to sprawdzić w Sta rt-> SQL Server 2008 -> Narzędzia do archiwizacji -> SQL Server Configuration Manager. Po lewej stronie tego narzędzia zobaczysz konfigurację sieci, rozwiń ją, aby zobaczyć, które protokoły są włączone.

+0

Jest skonfigurowany do akceptowania połączeń TCP. Mam Management Studio na tej samej maszynie co moja aplikacja C# i jestem podłączony do DB z tymi samymi ustawieniami. – Kiril

+1

Chciałem mieć Zintegrowane zabezpieczenia na moim lokalnym serwerze db, aby można było używać moich aktualnych poświadczeń konta systemu Windows. Ta odpowiedź skłoniła mnie do otwarcia Narzędzi konfiguracyjnych. Kiedy uruchomiłem agenta SQL Server, mogłem połączyć się z mojej aplikacji C# do bazy danych. Dzięki Colin. – DavidHyogo

2

spróbować tej

string sqlcon=("Data Source="your pc name\\SQLEXPRESS"; 
UserID=sa; 
Password=****; 
Initial Catalog="+MyDatabase+"; 
IntegratedSecurity=True;"); 
Powiązane problemy