2012-06-19 7 views
5

Próbuję zrobić coś, co moim zdaniem jest bardzo proste. Mam ciąg połączenia, który jestem pobieranie z bazy danych. Kiedy tworzę nową instancję połączenia SQL, wygląda (kiedy debuguję i patrzę na obiekt), tak jakby poprawnie wypełniał ciąg połączenia db. Jednak komunikat błędu, który otrzymuję, sprawia, że ​​myślę, że wszystkie informacje po podkreśleniu w nazwie bazy danych są eliminowane.Nazwa bazy danych po podkreśleniu w łańcuchu połączenia jest ignorowana

Kod Ex:

Database db = new SqlDatabase(ConnectionString); // Connection string appears correct 
DbCommand dbCommand = db.GetStoredProcCommand("StoredProcName"); 
DataSet approverDataset = db.ExecuteDataSet(dbCommand); // when this executes, exception is generated 

Kiedy uruchomić ten kod jestem witany z następującym komunikatem wyjątek: serwer główny „testdb_psidentity” nie jest w stanie uzyskać dostęp do bazy danych „testdb” w ramach obecnego bezpieczeństwa kontekst

Oto mój ciąg połączenia:

DataSource=testserver.com;Database=testdb_ps;Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd 

próbowałem zmieniając to:

DataSource=testserver.com;Database=[testdb_ps];Trusted_Connection=false;uid=testdb_psidentity;pwd=testpwd 

Chociaż wydaje się, że otrzymała pełną nazwę bazy danych, wydaje się, że szuka również bazy danych z tymi nawiasami. Po otrzymaniu tego błędu: Nie można otworzyć bazy danych "[testdb_ps]" żądanej przez login. Logowanie nie powiodło się. Logowanie nie powiodło się dla użytkownika "testdb_psidentity".

Jednak mogę zalogować się połączyć się z bazą danych za pomocą tego loginu/hasła w studio zarządzania serwerem SQL.

W jaki sposób mogę go zaakceptować nazwę bazy danych nazwa bazy danych testdb_ps? Nie mogę po prostu zmienić nazwy bazy danych, ponieważ nie mam do niej dostępu i powiedziano mi, że zmiana nazwy bazy danych po prostu się nie powiedzie.

+0

czy twój użytkownik "testdb_psidentity" ma uprawnienia do łączenia/wykonywania w bazie danych? jeśli nie jesteś tego pewien, możesz to sprawdzić, przechodząc do -> kliknij prawym przyciskiem myszy na bazę danych -> właściwości -> uprawnienia -> wybierz użytkownika i sprawdź w jawnej zakładce ... – NiK

+0

Niestety, kiedy kliknę prawym przyciskiem myszy DB, nie mam do tego dostępu. –

+0

Osiągnij, ale spróbuj umieścić źródło danych w składni [testserver.com] lub [testserver]. [Com]. I jesteś pewien, że nazwa źródła to testserver.com (nie testserver). Zobacz nazwę w SMSS – Paparazzi

Odpowiedz

1

Możesz próbować umieszczać cudzysłowy wokół ciągu połączenia, myślę, że interpretuje podkreślenie jako ogranicznik.

W zależności od sposobu korzystania używać cytatów lub

" 
+0

Czy twój cytat się zepsuł? Jak masz na myśli? Próbowałem używać go jako zmienną łańcuchową. Nie próbowałem ciężko kodować, ale generalnie jest to niezadowolone z naszych standardów kodowania. –

+0

Zazwyczaj umieszczamy nasze ciągi połączeń w pliku web.config lub app.config. To dlatego tak naprawdę nie mamy problemu z charakterem "_". Jeśli musisz pobrać ciąg połączenia z bazy danych, może spróbuj najpierw napisać go na łańcuch i wysłać ten ciąg. '"' jest używany w niektórych scenariuszach, kiedy nie możesz po prostu wpisać znaku, ale jeśli zrobić literał ciągu w języku C# nie powinieneś go potrzebować –

+0

Po prostu sugestia, ale jeśli ta baza danych była już od jakiegoś czasu, to zakładam, że inne aplikacje go używają? Jeśli tak, możesz spojrzeć i zobaczyć, jak sobie z tym radzą. –

0

Czy u w stanie połączyć się z bazą danych poprzez zarządzanie serwerem SQL studiu?

Spróbuj

  1. Wyłączenie firewall
  2. z adresu IP
  3. pomocą SQL Server nazwę instancji wyraźnie.
0

Generowanie klas encji za pomocą kreatora. W ten sposób otrzymasz zakodowany ciąg połączenia w app.config

Powiązane problemy