Başlatma dizesinin formatı, dizin 0'dan başlayan spesifikasyona uymuyor


142

Yerel geliştirme makinemde iyi çalışan bir ASP.Net uygulamam var.

Bu uygulamayı çevrimiçi çalıştırdığımda, aşağıdaki hatayı gösterir

Başlatma dizesinin formatı, dizin 0'dan başlayan spesifikasyona uymuyor


1
Muhtemelen kötü bir sql çağrısı / bağlantısı yapıyorsunuz. Eğer google Eğer blogs.msdn.com/b/jongallant/archive/2009/05/02/...
Aristos

1
Stackoverflow.com/questions/9040266/… adresindeki en çok oylanan cevap, burada en çok oylanan cevaptan daha doğru gibi görünüyor: geliştirme sırasında kullandığınız bağlantı dizesi işe yarasa da, yayımlamanın üretime uygun farklı bir bağlantı dizesi sağlaması ve bu başarısız olabilir. Örneğin, bu soruyu soran kişi, bağlantının "$ (ReplacableToken_mcn-Web.config Bağlantı Dizesi_0)" olduğunu, bu da yayınlamanın bir parçası olarak gerçekleşmesi gereken değiştirmenin bulunduğunu belirtir.
divega

Yanıtlar:


183

Bağlantı dizenizi kontrol edin. Bununla ilgili yardıma ihtiyacınız varsa Bağlantı Dizelerini kontrol edin , yaygın olarak kullanılanların bir listesini içeren .

Yaygın Olarak Kullanılan Bağlantı Dizeleri:

SQL Server 2012

Standart Güvenlik

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

Güvenilir Bağlantı

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

SQL Server örneğine bağlantı

Sunucu seçeneğinde kullanılan sunucu / örnek adı sözdizimi, tüm SQL Server bağlantı dizeleri için aynıdır.

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

SQL Server 2005

Standart Güvenlik

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

Güvenilir Bağlantı

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

SQL Server örneğine bağlantı

Sunucu seçeneğinde kullanılan sunucu / örnek adı sözdizimi, tüm SQL Server bağlantı dizeleri için aynıdır.

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

MySQL

Standart

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

TCP bağlantı noktasını belirtme

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

torpil

TNS kullanma

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

Entegre güvenlik kullanma

Data Source=TORCL;Integrated Security=SSPI;

Tnsnames.ora olmadan ODP.NET kullanma

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
Benim sorunum yanlış ConnectionString ile ilgili değil. Geliştirici makinemden üretim db'sine bağlanabiliyorum ve kullanabiliyorum. Aynı ayarları dağıtırken bu hatayı alıyorum. Neyin yanlış gidebileceğine dair bir fikrin var mı? Teşekkürler
Denis Besic

3
Denis üzerinde birçok şey olabilir. Birincisi, sunucunuz ve geliştirme makineniz aynı ağda mı? Ne tür bir giriş yapıyorsunuz? Herhangi bir proxy kullanıyor musunuz, prod sunucusundaki bir güvenlik duvarının arkasında mısınız? Herhangi bir VPN'e giriyor musunuz?
Hanlet Escaño

2
Kimin sorumlu olduğundan emin değilim, Visual Studio, Web Dağıtım Aracı veya smarterasp.net hosting. Uygulama dağıtıldığında, linkstring'imde bir şey değişti. Doğrudan web.config dosyasına eriştim ve manuel olarak güncelledim ve çalışıyor. +1;) ile ayırdığınız zaman için teşekkür ederiz;
Denis Besic

Çalışmıyor, doğru bağlantı dizesini koymaya çalıştım.


18

Bu birine yardımcı olabilir .. Parolamda noktalı virgül bulunuyordu, bu yüzden bu sorunla karşı karşıya kaldım. Gerçekten aptalca bir hataydı.

Aşağıdakileri değiştirdim:

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

için

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

Evet bu benim sorunum şifre vardı bir; yani '' eklemek çözüldü
Claudio

11

DbContextSınıfınızı içeren projeyi başlangıç ​​projesi olarak ayarlayın .

Arama yaparken bu hatayı alıyordum enable-migrations. Sağı Package Manager Consoleseçmiş olsam bile Default project, hala bağlantı dizesinin bulunmadığı o başlangıç ​​projesinin web.config dosyasına bakıyordu.


4
+1. Başlangıç ​​projesinin bağlantı dizesini içeren proje olması gerektiğini düşünüyorum. Bu benim sorunumdu. Başlangıç ​​projesi önerileriniz için teşekkür ederiz.
Tchaps

4

Bağlantı dizenizin şu biçimde olduğundan emin olun:

sunucu = FOOSERVER; veritabanı = BLAH_DB; havuzlama = yanlış; Bağlantı Zaman Aşımı = 60; Tümleşik Güvenlik = SSPI;

Dizenizde serveretiket yoksa, yöntem bu hatayla geri döner.


4

Ben de aynı problemi yaşadım. Yerel olarak site iyi çalıştı, ancak masmavi bir şekilde yukarıdaki mesajla başarısız olur.

sorun, ctordaki linkstring'i ayarlamaktı, şöyle:

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

Çalışmazsa, bu:

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

Beni aşar..


Bu çok garip bir çözüm ama hayatımı da kurtardı. Kayıt için, "db", yapılandırma dosyasındaki bağlantı dizenizin anahtarının adıdır (benimki "db" değildi)
mike

Benim için de düzeltildi. Geçerli bir linkstring vardı ama el ile ayar "Başlangıç ​​dizesi biçimi 0 dizininden başlayan belirtime uymuyor" attı.
Sardaukar

4

Eklemeyi unuttuğum gibi bağlantı dizenizi kontrol edin services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

Hataya neden olur ve burada eklediğimde Configuration.GetConnectionStringsorunu çözer

şimdi olduğu gibi bağlantı:

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

(Bu sorun .net çekirdeği için çözülmüştür)


3

Tam sp yoluna başvurmak bu sorunu benim için çözdü:

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


2

Aynı hatayla karşılaştım. Benim durumumda, bunun nedeni, bağlantı dizesindeki parola için bir kapanış teklifinin eksik olmasıydı.

Bundan değişti

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

için

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

Cevabınızı mükemmelleştirmek için lütfen bazı örnek kodlar veya başka bir şey yazın. Bir satır her şeyi açıklamıyor
Manish Kumawat

Elbette. Yukarıdaki cevabımı düzenledi.
Amer Bashoeb

1

Bu, bir web sayfasını bir çözümden diğerine kopyaladığınızda, çözümünüzü çalıştırdığınızda ve webconfig içinde farklı bir bağlantı dizesi adı olduğunu öğrendiğinizde de olur. Sonra dikkatsizce sayfanın tasarım görünümünde özellikler panelinde bağlantı dizesinin adını değiştirin.

Tasarım yerine kod bölümünde değiştirmek daha iyidir.


1

Benim sorunum bir DB nesnesi için benim yapıcı için veritabanı günlüğü kodu ekledi ve bu benim masmavi dağıtım profilinde tahribat neden gibiydi.

FYI - Bu örneği basitleştirdim, gerçek kodda bu üretimde kapatıldı (ancak yine de kodda)

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

1

Bağlantı dizelerimde yazım hatası vardı "Veritabanı == PESitecore1_master"

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

1

Aynı sorunu yaşadım ve sonunda şu şekilde çözmeyi başardım:

Sorun, web.config dosyamdaki bağlantı dizesi tanımındaydı.

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

Yukarıdakiler yerel olarak mükemmel çalıştı çünkü kullanıcıları ve rolleri yönettiğimde yerel bir Veritabanı kullandım. Uygulamamı IIS'ye aktardığımda yerel DB'ye artık erişilemedi, ayrıca DB'mi SQL Server'da kullanmak istiyorum. Bu yüzden yukarıdaki bağlantı dizesini aşağıdaki SQL Server DB eşdeğeri değiştirmek:

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

Not: Yukarıdaki, ayrıca, aynı SQL Server'ı yerel kutunuzdan kullanacağınızı varsayalım (yerel web.config'nize eklemeniz durumunda - tam olarak benim durumumda bunu yaptım).


1

Aynı sorunu yaşadım, IIS'ye dağıtımın bağlantı dizelerini doğru şekilde ayarlamadığını öğrenmeye geldim. IIS'de sitenin bağlantı dizelerini gerçek bağlantı dizesi yerine görüntülerken '$ (ReplacableToken_devConnection-Web.config Bağlantı Dizesi_0)' idi. Onları orada güncelledim ve beklendiği gibi çalıştım


can you plz elaborate it more
TechnicalKeera

Ben de aynı sorunu var ve 3 hafta muzdarip stackoverflow.com/questions/48929891/…
TechnicalKeera

1

Bağlantı dizesi yapılandırmamı kopyalayıp test projeme yapıştırdım ve bu hatayla çalışmaya başladım. Bağlantı dizesi WebAPI projemde iyi çalıştı. İşte benim düzeltmem.

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

1

Bağlantı dizesinin sonunda & quot komutunu kaldırdım ve çalıştı

Onun yerine

App=EntityFramework&quot;

Kullanılmış

App=EntityFramework;

DefaultConnection'ı aşağıdaki gibi ayarlayın

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

Not: connectionString İçermez:
| x | Meta veri bilgisi: "meta veri = res: // * /"
| x | Kodlanmış Alıntılar: "" "


0

Benim sorunum sağladığım bağlantı dizesinin yanlış olması ya da kullandığımı düşündüğüm app.config dosyasındaki bağlantı dizesinin yanlış olması değil, yanlış app.config kullanıyordum.


0

Bazen Sql Server hizmeti başlatılmadı. Bu hataya neden olabilir. Hizmetler'e gidin ve Sql Server'ı başlatın. Bu işe yaramalı. resim açıklamasını buraya girin


Sql Server Express başlatılmazsa, OP'nin sorusunda açıklandığı gibi değil, Sunucu Örneği Özel Durumu'nu alırsınız.
noobprogrammer

0

Web.config içinde depolanan bağlantı dizeleriyle birlikte satır içi sqldatasource kullanan eski bir webforms uygulamasını yöneten talihsiz bir ruh için, bağlantı dizenize <yerine <% APSDataConnectionString%> % $ ConnectionStrings: MyConnectionString%>. Bu, .NET'i 3.5'ten 4.x'e yükseltirken bize oldu.

<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

Benim durumumda sorun sunucuda, uygulama tarafından farklı bir appsettings.json dosyası kullanılmasıydı.


0

Benim durumumda, benzer bir hata aldım:

Uygulama tarafından işlenmeyen bir istisna oluştu. System.ArgumentException: Başlatma dizesinin biçimi, 91 numaralı dizinden başlayarak spesifikasyona uymuyor.

Bağlantı dizgimi değiştiriyorum:

Sunucu = .; Veritabanı = dbname; Kullanıcı Kimliği = myuserid; Parola = parolam "

için:

Sunucu = .; Veritabanı = dbname; Kullanıcı Kimliği = myuserid; Parola = 'parola' '

ve işe yarıyor, şifreye tek tırnak ekledim.


0

Ben de bu hatayı vardı ve aşağıdaki gibi çözmek mümkün oldu: Daha önce appsettings.json için oluşturulan bağlantıları bir bağlantı içine yazdı (ConnectionsStrings (ekstra "s" dikkat) ve neden veritabanım bağlanmak için çalıştı ASP.NET CORE uygulamasıydı ve bu nedenle .GetConnectionString Yöntemi ile bağlantı kurmak istedim ( buradaki ayrıntılar) .Bu yöntem örtük olarak "ConnectionStrings" -bölümünde bir connectiontring arar. "ConnectionStrings" olarak değiştirdiğimde / düzelttiğimde beklendiği gibi çalıştı.


0

Bildiğim gibi, çözümünüzde 1'den fazla bağlantı dizesi (mevcut projeniz, başlangıç ​​projeniz, ...) olduğunda, bu hatayla karşılaşabilirsiniz.

bu bağlantı tıklamanıza yardımcı olabilir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.