Format ciągu inicjalizacyjnego nie jest zgodny ze specyfikacją zaczynającą się od indeksu 0

142

Mam aplikację ASP.Net, która działa dobrze na moim lokalnym komputerze deweloperskim.

Kiedy uruchamiam tę aplikację online, wyświetla następujący błąd

Format ciągu inicjalizacyjnego nie jest zgodny ze specyfikacją zaczynającą się od indeksu 0

GS Bhangal
źródło
1
Prawdopodobnie wykonałeś złe wywołanie / połączenie sql. Jeśli wygooglujesz
Aristos
1
Najczęściej głosowana odpowiedź na stackoverflow.com/questions/9040266/ ... wydaje się być dokładniejsza niż ta najczęściej wybierana tutaj: chociaż parametry połączenia używane podczas programowania mogą działać, publikacja musi zapewnić inne parametry połączenia odpowiednie dla produkcji i to może się nie udać. Np. Osoba, która zadała to pytanie, stwierdziła, że ​​połączenie to „$ (ReplacableToken_mcn-Web.config Connection String_0)”, co wskazuje, że zamiana, która powinna nastąpić w ramach publikowania, nie nastąpiła.
divega

Odpowiedzi:

183

Sprawdź parametry połączenia. Jeśli potrzebujesz pomocy, sprawdź Parametry Połączenia , które zawierają listę najczęściej używanych.

Często używane ciągi połączeń:

SQL Server 2012

Standardowe zabezpieczenia

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;

Zaufane połączenie

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

Połączenie z instancją SQL Server

Składnia nazwy serwera / instancji używana w opcji serwera jest taka sama dla wszystkich parametrów połączenia programu SQL Server.

Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;
Password=myPassword;

SQL Server 2005

Standardowe zabezpieczenia

Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;

Zaufane połączenie

Server=myServerAddress;Database=myDataBase;Trusted_Connection=True;

Połączenie z instancją SQL Server

Składnia nazwy serwera / instancji używana w opcji serwera jest taka sama dla wszystkich parametrów połączenia programu SQL Server.

Server=myServerName\myInstanceName;Database=myDataBase;User Id=myUsername;Password=myPassword;

MySQL

Standard

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

Określanie portu TCP

Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

Wyrocznia

Korzystanie z TNS

Data Source=TORCL;User Id=myUsername;Password=myPassword;

Korzystanie ze zintegrowanych zabezpieczeń

Data Source=TORCL;Integrated Security=SSPI;

Korzystanie z ODP.NET bez tnsnames.ora

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;
Hanlet Escaño
źródło
9
Mój problem nie jest związany z nieprawidłowym ciągiem połączeń. Jestem w stanie połączyć się z mojej maszyny deweloperskiej do bazy produkcyjnej i używać jej. Gdy wdrażam te same ustawienia, pojawia się ten błąd. Czy masz pojęcie, co może się nie udać? Dzięki
Denis Besic
3
Denis może się wiele rzeczy dziać. Po pierwsze, czy Twój serwer i maszyna deweloperska znajdują się w tej samej sieci? Jakiego rodzaju logowania używasz? Czy używasz jakiegokolwiek serwera proxy, czy jesteś za zaporą ogniową na serwerze produkcyjnym? Czy korzystasz z jakiejkolwiek sieci VPN?
Hanlet Escaño
2
Nie jestem pewien, kto jest odpowiedzialny, czy to Visual Studio, Tool for Web Deployment czy hosting smarterasp.net. Kiedy aplikacja została wdrożona, coś zmieniło mój ciąg połączenia. Bezpośrednio uzyskałem dostęp do web.config i ręcznie go zaktualizowałem i działa. Dziękuję za
poświęcony
To nie działa, próbowałem wprowadzić poprawne parametry połączenia.
Czy ktoś może zobaczyć to pytanie? stackoverflow.com/questions/46167682/…
18

To może komuś pomóc ... Moje hasło zawierało średnik, więc napotkałem ten problem. Dodałem więc hasło w cudzysłowie. To był naprawdę głupi błąd.

Zmieniłem następujące:

<add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password=pass;word" providerName="System.Data.SqlClient" />

do

<add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='pass;word'" providerName="System.Data.SqlClient" />
Abdul Rehman Sayed
źródło
Tak, to był mój problem, moje hasło miało; więc dodanie '' rozwiązało problem
Claudio
11

Ustaw projekt zawierający DbContextklasę jako projekt startowy.

Otrzymałem ten błąd podczas dzwonienia enable-migrations. Nawet jeśli w polu Package Manager Consolewybrałem prawo Default project, nadal patrzył na plik web.config tego projektu startowego, w którym nie było parametrów połączenia.

Targowisko
źródło
4
+1. Myślę, że projekt początkowy powinien być projektem zawierającym parametry połączenia. To był mój problem. Dziękuję za sugestię dotyczącą projektu startowego.
Tchaps,
4

Upewnij się, że parametry połączenia mają następujący format:

server = FOOSERVER; database = BLAH_DB; pooling = false; Connect Timeout = 60; Integrated Security = SSPI;

Jeśli w ciągu brakuje servertagu, metoda zwróci ten błąd.

DBNoob
źródło
4

Miałem ten sam problem. Lokalnie strona działała dobrze, ale na lazurowym nie powiodłaby się z powyższym komunikatem.

okazuje się, że problem polegał na ustawieniu ciągu połączenia w ctor, na przykład:

    public DatabaseContext() 
    {
        Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString;
    }

NIE działa, to będzie:

    public DatabaseContext() : base("db")
    {
    }

Bije mnie

Flores
źródło
To taka dziwna poprawka, ale też uratowała mi życie. Dla przypomnienia, „db” to nazwa klucza twojego ciągu połączenia w pliku konfiguracyjnym (mój nie był „db”)
mike
Naprawiłem to również dla mnie. Miałem prawidłowy ciąg połączenia, ale ustawienie go ręcznie spowodowało wyświetlenie komunikatu „Format ciągu inicjalizacyjnego nie jest zgodny ze specyfikacją zaczynającą się od indeksu 0”.
Sardaukar
4

Sprawdź parametry połączenia, tak jak zapomniałem dodać services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

Powoduje błąd i tutaj jak dodam Configuration.GetConnectionStringto rozwiązuje problem

jak teraz połączenie to:

services.AddDbContext<dbsContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default")));

działa dobrze (ten problem został rozwiązany dla .net core)

user8099291
źródło
3

Odwołanie się do pełnej ścieżki SP rozwiązało ten problem:

var command = new SqlCommand("DatabaseName.dbo.StoredProcedureName", conn)
zaraz
źródło
2

Miałem ten sam błąd. W moim przypadku było to spowodowane brakiem cudzysłowu zamykającego hasło w ciągu połączenia.

Zmieniono z tego

<add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='password" providerName="System.Data.SqlClient" />

Do

<add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='password'" providerName="System.Data.SqlClient" />
Amer Bashoeb
źródło
Napisz przykładowy kod lub coś innego, aby Twoja odpowiedź była doskonała. Jedna linijka nie wyjaśnia wszystkiego
Manish Kumawat
Pewnie. Edytowałem moją odpowiedź powyżej.
Amer Bashoeb
1

Dzieje się tak również, gdy kopiujesz stronę internetową z jednego rozwiązania do drugiego, a następnie uruchamiasz rozwiązanie i dowiadujesz się, że ma ono inną nazwę ciągu połączenia w konfiguracji webconfig. Następnie beztrosko zmieniasz nazwę ciągu połączenia w panelu właściwości w widoku projektu strony.

Lepiej po prostu zmienić to w części kodu zamiast projektu.

Gellie Ann
źródło
1

Mój problem polegał na tym, że dodałem kod rejestrowania bazy danych do mojego konstruktora dla obiektu DB i wydawało się, że spowodowało to spustoszenie w moim profilu wdrażania Azure.

FYI - uprościłem ten przykład, w prawdziwym kodzie to zostało wyłączone w produkcji (ale nadal w kodzie)

public class MyDB : DbContext
{
    public MyDB()
    {
         this.Database.Log = x => { Debug.WriteLine(x); };
    }
}
Aaron Sherman
źródło
1

Wystąpiła literówka w moich parametrach połączenia „Baza danych == PESitecore1_master”

<add name="master" connectionString="user id=sa;password=xxxxx;Data Source=APR9038KBD\SQL2014;Database==PESitecore1_master"/>
Azadeh Khojandi
źródło
1

Miałem ten sam problem i ostatecznie udało mi się go rozwiązać w następujący sposób:

Problem dotyczył definicji parametrów połączenia w moim pliku web.config.

<add name="DefaultConnection" connectionString="DefaultConnection_ConnectionString" providerName="System.Data.SqlClient"/>

Powyższe działało idealnie lokalnie, ponieważ korzystałem z lokalnej bazy danych podczas zarządzania użytkownikami i rolami. Kiedy przeniosłem swoją aplikację do IIS, lokalna baza danych nie była już dostępna, dodatkowo chciałbym używać mojej bazy danych w SQL Server. Więc zmieniam powyższe parametry połączenia na następujący odpowiednik bazy danych SQL Server:

<add name="DefaultConnection" connectionString="data source=MY_SQL_SERVER; Initial Catalog=MY_DATABASE_NAME; Persist Security Info=true; User Id=sa;Password=Mybl00dyPa$$" providerName="System.Data.SqlClient"/>

UWAGA: Powyższe również załóżmy, że zamierzasz użyć tego samego SQL Server z twojego lokalnego pudełka (w przypadku, gdy włączysz go do lokalnego web.config - dokładnie to zrobiłem w moim przypadku).

Andreas Venieris
źródło
1

Miałem ten sam problem, doszedłem do wniosku, że wdrożenie do IIS nie ustawiło poprawnie parametrów połączenia. były one „$ (ReplacableToken_devConnection-Web.config Connection String_0)” podczas wyświetlania parametrów połączenia witryny w usługach IIS, zamiast rzeczywistych parametrów połączenia. Zaktualizowałem je tam i wszystkie działały zgodnie z oczekiwaniami

Jason
źródło
czy możesz to bardziej rozwinąć
TechnicalKeera
RÓWNIEŻ mam ten sam problem i cierpię z powodu 3 tygodni stackoverflow.com/questions/48929891/ ...
TechnicalKeera
1

Skopiowałem i wkleiłem konfigurację parametrów połączenia do projektu testowego i uruchomiłem ten błąd. Parametry połączenia działały dobrze w moim projekcie WebAPI. Oto moja poprawka.

var connection = ConfigurationManager.ConnectionStrings["MyConnectionString"];
var unitOfWork = new UnitOfWork(new SqlConnection(connection.ConnectionString));
Kris Kilton
źródło
1

Usunąłem & quot; na końcu parametrów połączenia i zadziałało

Zamiast

App=EntityFramework&quot;

Używany

App=EntityFramework;

Ustaw DefaultConnection jak poniżej

<add name="DefaultConnection" connectionString="data source=(local);initial catalog=NamSdb;persist security info=True;user id=sa;password=sa;MultipleActiveResultSets=True;App=EntityFramework;" providerName="System.Data.SqlClient" />

Uwaga: w ciągu connectionString nie uwzględniaj:
| x | Informacje o metadanych: "metadata = res: // * /"
| x | Zakodowane cytaty: „” ”

Sujay UN
źródło
0

Mój problem nie polegał na tym, że podane przeze mnie parametry połączenia były nieprawidłowe lub że parametry połączenia w pliku app.config, którego używałem, były nieprawidłowe, ale użyłem niewłaściwego pliku app.config.

Jeff Dege
źródło
0

Czasami usługa Sql Server nie została uruchomiona. Może to spowodować błąd. Przejdź do Usługi i uruchom Sql Server. To powinno zadziałać. wprowadź opis obrazu tutaj

Claudinei Ferreira
źródło
Jeśli Sql Server Express nie jest uruchomiony, otrzymasz Wyjątek wystąpienia serwera, a nie ten, który OP opisał w swoim pytaniu.
noobprogrammer
0

Dla drugiej niefortunnej duszy, która zarządza starszą aplikacją formularzy internetowych, która używa wbudowanego źródła sqldatasource, wraz z parametrami połączenia przechowywanymi w web.config, możesz otrzymać ten błąd, jeśli uzyskasz dostęp do parametrów połączenia, takich jak <% APSDataConnectionString%> zamiast < % $ ConnectionStrings: MyConnectionString%>. Zdarzyło się to nam podczas aktualizacji .NET z 3.5 do 4.x.

<asp:DropDownList ID="ddl" runat="server" DataSourceID="SqlDataSource1"
  DataTextField="value" DataValueField="id"></asp:DropDownList>                
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
  ConnectionString="<%$ ConnectionStrings:MyConnectionString %>"
  SelectCommand="select id, value from a_table">
</asp:SqlDataSource>
Michael
źródło
0

W moim przypadku problem polegał na tym, że na serwerze aplikacja używała innego pliku appsettings.json.

AGuyCalledGerald
źródło
0

W moim przypadku mam podobny błąd:

Aplikacja zgłosiła nieobsługiwany wyjątek. System.ArgumentException: Format ciągu inicjującego nie jest zgodny ze specyfikacją zaczynającą się od indeksu 91.

Zmieniam parametry połączenia z:

Server = .; Baza danych = nazwa_db; Identyfikator użytkownika = myuserid; Hasło = mojehasło ”

do:

Server = .; Baza danych = nazwa_db; Identyfikator użytkownika = myuserid; Hasło = 'mojehasło' ”

i działa, dodałem pojedyncze cudzysłowy do hasła.

YuKeung
źródło
0

Miałem również ten błąd i mogłem go rozwiązać w następujący sposób: wcześniej napisałem ciąg połączenia do pliku appsettings.json w sekcji, którą utworzyłem (ConnectionsStrings (zauważ dodatkowe „s”) i próbowałem połączyć się z moją bazą danych, co spowodowało To była aplikacja ASP.NET CORE, więc chciałem się z nią połączyć za pomocą metody .GetConnectionString (szczegóły na ten temat tutaj ). Wygląda na to, że ta metoda niejawnie wyszukuje ciąg połączenia w sekcji „ConnectionStrings”, co nie nie istnieje. Kiedy zmieniłem / poprawiłem go na „ConnectionStrings”, działało zgodnie z oczekiwaniami.

bezradny
źródło
0

Jak wiem, ilekroć masz więcej niż 1 ciąg połączenia w swoim rozwiązaniu (Twój bieżący projekt, projekt startowy, ...), możesz napotkać ten błąd

to łącze może pomóc w kliknięciu

aseman arabsorkhi
źródło