초기화 문자열의 형식이 인덱스 0에서 시작하는 사양을 준수하지 않습니다


142

로컬 개발 컴퓨터에서 잘 실행되는 ASP.Net 응용 프로그램이 있습니다.

이 응용 프로그램을 온라인으로 실행하면 다음 오류가 표시됩니다

초기화 문자열의 형식이 인덱스 0에서 시작하는 사양을 준수하지 않습니다


1
아마도 SQL 호출 / 연결이 잘못되었습니다. 당신이 구글 경우 blogs.msdn.com/b/jongallant/archive/2009/05/02/…
Aristos

1
stackoverflow.com/questions/9040266/ 에서 가장 많이 투표 된 답변은 여기에서 가장 투표 된 답변 보다 더 정확한 것 같습니다. 개발에 사용하는 연결 문자열이 작동 할 수 있지만 게시는 프로덕션에 적합한 다른 연결 문자열을 제공해야합니다. 실패 할 수 있습니다. 예를 들어,이 질문을 한 사람은 연결이 "$ (ReplacableToken_mcn-Web.config Connection String_0)"인 것으로 나타났습니다. 이는 게시의 일부로 발생했을 교체가 발생하지 않았 음을 나타냅니다.
divega

답변:


183

연결 문자열을 확인하십시오. 도움이 필요하면 일반적으로 사용되는 목록이있는 Connection Strings를 확인하십시오 .

일반적으로 사용되는 연결 문자열 :

SQL Server 2012

표준 보안

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

신뢰할 수있는 연결

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

SQL Server 인스턴스에 연결

서버 옵션에 사용 된 서버 / 인스턴스 이름 구문은 모든 SQL Server 연결 문자열에서 동일합니다.

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

SQL Server 2005

표준 보안

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

신뢰할 수있는 연결

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

SQL Server 인스턴스에 연결

서버 옵션에 사용 된 서버 / 인스턴스 이름 구문은 모든 SQL Server 연결 문자열에서 동일합니다.

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

MySQL

표준

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

TCP 포트 지정

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

신탁

TNS 사용

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

통합 보안 사용

Data Source=TORCL;Integrated Security=SSPI;

tnsnames.ora없이 ODP.NET 사용

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=MyHost)(PORT=MyPort)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=MyOracleSID)));User Id=myUsername;Password=myPassword;

9
내 문제는 잘못된 ConnectionString과 관련이 없습니다. 내 개발자 컴퓨터에서 프로덕션 DB로 연결하여 사용할 수 있습니다. 동일한 설정을 배포하면이 오류가 발생합니다. 무엇이 잘못 될 수 있는지 알고 있습니까? 감사합니다
Denis Besic 2016 년

3
Denis에는 많은 일이있을 수 있습니다. 첫째, 서버와 개발자 컴퓨터가 동일한 네트워크에 있습니까? 어떤 종류의 로그인을 사용하고 있습니까? 프록시 서버를 사용하고 있습니까? prod 서버에서 방화벽 뒤에 있습니까? VPN에 접속하고 있습니까?
Hanlet Escaño 2016 년

2
누가 책임이 있는지 잘 모르겠습니다. Visual Studio, 웹 배포 도구 또는 smarterasp.net 호스팅 도구입니다. 응용 프로그램을 배포했을 때 연결 문자열이 변경되었습니다. web.config에 직접 액세스하여 수동으로 업데이트하면 작동합니다. +1 시간 내 주셔서 감사합니다)
데니스 Besic

작동하지 않습니다. 올바른 연결 문자열을 넣으려고했습니다.

누구든지이 질문을 볼 수 있습니까? stackoverflow.com/questions/46167682/…

18

이 암호는 누군가에게 도움이 될 수 있습니다. 암호에 세미콜론이 포함되어 있으므로이 문제가 발생했습니다. 따라서 암호를 따옴표로 묶었습니다. 정말 어리석은 실수였습니다.

나는 다음을 바꿨다.

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

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

예, 이것은 내 비밀번호에 대한 나의 문제였습니다; 그래서 ''추가하면 해결
Claudio

11

DbContext클래스가 포함 된 프로젝트를 시작 프로젝트로 설정하십시오 .

전화하는 동안이 오류가 발생했습니다 enable-migrations. Package Manager ConsoleI에서 right를 선택한 경우에도 Default project연결 문자열이없는 해당 시작 프로젝트의 web.config 파일을 계속보고있었습니다.


4
+1. 시작 프로젝트는 연결 문자열이 포함 된 프로젝트 여야한다고 생각합니다. 이것은 내 문제였다. Startup 프로젝트를 제안 해 주셔서 감사합니다.
Tchaps

4

연결 문자열이 다음 형식인지 확인하십시오.

서버 = FOOSERVER; 데이터베이스 = BLAH_DB; 풀링 = 거짓; 연결 시간 초과 = 60; 통합 보안 = SSPI;

문자열에 server태그 가 없으면 이 오류와 함께 메소드가 다시 리턴됩니다.


4

나는 같은 문제가 있었다. 로컬로 사이트가 제대로 실행되었지만 하늘빛으로 인해 위의 메시지가 표시되지 않습니다.

문제는 다음과 같이 ctor에서 연결 문자열을 설정하는 것으로 나타났습니다.

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

작동하지 않습니다.

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

나를 때리는 ..


이것은 이상한 수정이지만 내 생명도 구했습니다. 레코드의 경우, "db"는 구성 파일에있는 연결 문자열의 키 이름입니다 (mine은 "db"가 ​​아님)
mike

나에게도 고쳤다. 유효한 연결 문자열이 있지만 수동으로 설정하면 "초기화 문자열의 형식이 인덱스 0에서 시작하는 사양을 준수하지 않습니다"가 발생했습니다.
Sardaukar

4

추가하는 것을 잊어 버린 것처럼 연결 문자열을 확인하십시오. services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

오류가 발생하고 여기에 추가 Configuration.GetConnectionString하면 문제가 해결됩니다.

지금처럼 연결은 다음과 같습니다

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

잘 작동합니다 (이 문제는 .net 코어에서 해결되었습니다)


3

전체 sp 경로를 참조하면이 문제가 해결되었습니다.

var command = new SqlCommand("DatabaseName.dbo.StoredProcedureName", conn)


2

나는 같은 오류가 있었다. 제 경우에는 연결 문자열에 암호에 대한 닫는 따옴표가 없기 때문입니다.

이 변경

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

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

답을 완벽하게하기 위해 샘플 코드 나 다른 것을 작성하십시오. 한 줄로 모든 것을 설명 할 수는 없습니다
Manish Kumawat

확실한. 위의 답변을 수정했습니다.
Amer Bashoeb

1

한 솔루션에서 다른 솔루션으로 웹 페이지를 복사 한 다음 솔루션을 실행하고 웹 구성에서 다른 연결 문자열 이름을 갖는 것을 발견 할 때도 발생합니다. 그런 다음 페이지 디자인보기의 속성 패널에서 연결 문자열의 이름을 부주의하게 변경합니다.

디자인 대신 코드 부분에서 변경하는 것이 좋습니다.


1

내 문제는 DB 로깅을 위해 생성자에 데이터베이스 로깅 코드를 추가했기 때문에 Azure 배포 프로필을 혼란스럽게하는 것처럼 보였습니다.

참고-이 예제를 단순화했습니다. 실제 코드에서는 프로덕션에서 꺼졌습니다 (그러나 여전히 코드에서)

public class MyDB : DbContext
{
    public MyDB()
    {
         this.Database.Log = x => { Debug.WriteLine(x); };
    }
}

1

연결 문자열 "Database == PESitecore1_master"에 오타가 있습니다.

<add name="master" connectionString="user id=sa;password=xxxxx;Data Source=APR9038KBD\SQL2014;Database==PESitecore1_master"/>

1

나는 같은 문제가 있었고 마침내 다음과 같은 방법으로 문제를 해결할 수있었습니다.

내 web.config의 연결 문자열 정의에 문제가 있습니다.

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

위의 내용은 사용자와 역할을 관리 할 때 로컬 데이터베이스를 사용했기 때문에 완벽하게 작동했습니다. 내 응용 프로그램을 IIS로 전송할 때 로컬 DB에 더 이상 액세스 할 수 없었으며 또한 SQL Server에서 DB를 사용하고 싶습니다. 따라서 위의 연결 문자열을 다음 SQL Server DB와 동일하게 변경합니다.

<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"/>

참고 : 위의 내용은 로컬 상자에서 동일한 SQL Server를 사용한다고 가정합니다 (이를 로컬 web.config에 통합하는 경우-필자의 경우 정확히 한 것입니다).


1

나는 같은 문제가 있었는데, IIS 배포가 연결 문자열을 올바르게 설정하지 않았다는 것을 알게되었습니다. 실제 연결 문자열 대신 IIS에서 사이트의 연결 문자열을 볼 때 '$ (ReplacableToken_devConnection-Web.config Connection String_0)'이었습니다. 나는 그것들을 거기에서 업데이트했고, 모두 예상대로 일했다.


더 자세히
TechnicalKeera

또한 삼주에서 같은 문제와 고통을 stackoverflow.com/questions/48929891/...
TechnicalKeera

1

연결 문자열 구성을 복사하여 테스트 프로젝트에 붙여 넣고이 오류가 발생하기 시작했습니다. WebAPI 프로젝트에서 연결 문자열이 제대로 작동했습니다. 여기 내 수정이 있습니다.

var connection = ConfigurationManager.ConnectionStrings["MyConnectionString"];
var unitOfWork = new UnitOfWork(new SqlConnection(connection.ConnectionString));

1

연결 문자열 끝에서 & quot를 제거하고 작동했습니다.

대신에

App=EntityFramework&quot;

익숙한

App=EntityFramework;

아래와 같이 DefaultConnection을 설정하십시오

<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" />

참고 : connectionString에서 다음을 포함하지 마십시오.
| x | 메타 데이터 정보 : "metadata = res : // * /"
| x | 인코딩 된 따옴표 : "" "


0

내 문제는 내가 제공 한 연결 문자열이 잘못되었거나 내가 사용한다고 생각한 app.config의 연결 문자열이 잘못되었지만 잘못된 app.config를 사용하고 있다는 것이 아닙니다.


0

때때로 Sql Server 서비스가 시작되지 않았습니다. 오류가 발생할 수 있습니다. 서비스로 이동하여 Sql Server를 시작하십시오. 이것이 작동해야합니다. 여기에 이미지 설명을 입력하십시오


Sql Server Express가 시작되지 않으면 OP가 질문에 설명 된 서버 인스턴스 예외가 아닙니다.
noobprogrammer

0

web.config에 저장된 연결 문자열과 함께 인라인 sqldatasource를 사용하는 레거시 webforms 응용 프로그램을 관리하는 다른 불행한 영혼의 경우 <대신에 <% APSDataConnectionString %>과 같은 연결 문자열에 액세스하면이 오류가 발생할 수 있습니다 % $ ConnectionStrings : MyConnectionString %>입니다. 이것은 .NET을 3.5에서 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>

0

제 경우에는 서버에서 다른 appsettings.json 파일이 응용 프로그램에서 사용되었다는 것이 문제였습니다.


0

내 경우에는 비슷한 오류가 발생했습니다.

응용 프로그램에서 처리되지 않은 예외가 발생했습니다. System.ArgumentException : 초기화 문자열의 형식이 인덱스 91에서 시작하는 사양을 준수하지 않습니다.

연결 문자열을 다음에서 변경합니다.

서버 = .; 데이터베이스 = dbname; 사용자 ID = myuserid; 비밀번호 = mypassword "

에:

서버 = .; 데이터베이스 = dbname; 사용자 ID = myuserid; 비밀번호 = 'mypassword' "

작동하며 암호에 작은 따옴표를 추가했습니다.


0

나는이 오류도 있었고 다음과 같이 해결할 수 있었다 : 나는 이전에 appsettings.json에 연결 문자열을 내가 작성한 섹션 (ConnectionsStrings (추가 "s")에 작성하고 내 데이터베이스에 연결하려고 시도했다. ASP.NET CORE 응용 프로그램이므로 .GetConnectionString 메서드를 사용하여 연결하고 싶었습니다 (자세한 내용은 여기 참조 ).이 메서드는 "ConnectionStrings" 섹션에서 연결 문자열을 암시 적으로 검색하는 것 같습니다. 존재하지 않습니다. "ConnectionStrings"로 변경 / 수정했을 때 예상대로 작동했습니다.


0

내가 아는 것처럼 솔루션 (현재 프로젝트, 시작 프로젝트 등)에 둘 이상의 연결 문자열이있을 때 마다이 오류가 발생할 수 있습니다

이 링크를 클릭 하면 도움이 될 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.