Format string inisialisasi tidak sesuai dengan spesifikasi mulai dari indeks 0

142

Saya memiliki aplikasi ASP.Net yang berjalan dengan baik di mesin pengembangan lokal saya.

Ketika saya menjalankan aplikasi ini secara online, itu menunjukkan kesalahan berikut

Format string inisialisasi tidak sesuai dengan spesifikasi mulai dari indeks 0

GS Bhangal
sumber
1
Anda mungkin membuat panggilan / koneksi sql yang buruk. Jika Anda google itu blogs.msdn.com/b/jongallant/archive/2009/05/02/…
Aristos
1
Jawaban yang paling banyak dipilih di stackoverflow.com/questions/9040266/… tampaknya lebih akurat daripada yang paling banyak dipilih di sini: meskipun string koneksi yang Anda gunakan dalam pengembangan dapat berfungsi, penerbitan perlu memberikan string koneksi berbeda yang sesuai untuk produksi, dan ini bisa gagal. Misalnya orang yang mengajukan pertanyaan menemukan bahwa koneksi itu adalah "$ (ReplacableToken_mcn-Web.config Connection String_0)," yang menunjukkan penggantian yang seharusnya terjadi karena bagian dari publikasi tidak terjadi.
divega

Jawaban:

183

Periksa string koneksi Anda. Jika Anda memerlukan bantuan untuk itu periksa Connection Strings , yang memiliki daftar yang biasa digunakan.

String Koneksi yang umum digunakan:

SQL Server 2012

Keamanan Standar

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

Koneksi Tepercaya

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

Koneksi ke turunan SQL Server

Sintaks nama server / instance yang digunakan dalam opsi server sama untuk semua string koneksi SQL Server.

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

SQL Server 2005

Keamanan Standar

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

Koneksi Tepercaya

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

Koneksi ke turunan SQL Server

Sintaks nama server / instance yang digunakan dalam opsi server sama untuk semua string koneksi SQL Server.

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

MySQL

Standar

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

Menentukan port TCP

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

Peramal

Menggunakan TNS

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

Menggunakan keamanan terintegrasi

Data Source=TORCL;Integrated Security=SSPI;

Menggunakan ODP.NET tanpa 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
sumber
9
Masalah saya tidak terkait dengan ConnectionString yang salah. Saya dapat terhubung dari mesin pengembang saya ke db produksi dan menggunakannya. Ketika saya menggunakan pengaturan yang sama saya mendapatkan kesalahan ini. Apakah Anda tahu apa yang salah? Terima kasih
Denis Besic
3
Mungkin ada banyak hal yang terjadi pada Denis. Pertama, apakah server Anda dan mesin dev Anda di jaringan yang sama? Login seperti apa yang Anda gunakan? Apakah Anda menggunakan proxy apa pun, apakah Anda berada di belakang firewall di server prod? Apakah masuk ke VPN?
Hanlet Escaño
2
Saya tidak yakin siapa yang bertanggung jawab, apakah itu Visual Studio, Alat untuk Penggunaan Web atau hosting smarterasp.net. Ketika aplikasi dikerahkan, sesuatu mengubah koneksi saya. Saya mengakses langsung ke web.config dan memperbaruinya secara manual dan berfungsi. Terima kasih atas waktu Anda dengan +1;)
Denis Besic
Ini tidak berfungsi, saya telah mencoba untuk meletakkan string koneksi yang benar.
Adakah yang bisa melihat pertanyaan ini? stackoverflow.com/questions/46167682/…
18

Ini mungkin membantu seseorang .. Kata sandi saya mengandung tanda titik koma sehingga menghadapi masalah ini. Jadi, tambah kata sandi dalam tanda kutip. Itu benar-benar kesalahan konyol.

Saya mengubah yang berikut:

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

untuk

<add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='pass;word'" providerName="System.Data.SqlClient" />
Abdul Rehman Sayed
sumber
Ya ini masalah saya karena kata sandi saya punya; jadi menambahkan '' menyelesaikannya
Claudio
11

Atur proyek yang berisi DbContextkelas Anda sebagai proyek startup.

Saya mendapatkan kesalahan ini saat menelepon enable-migrations. Bahkan jika dalam Package Manager ConsoleI memilih yang benar Default project, itu masih melihat file web.config dari proyek startup itu, di mana string koneksi tidak ada.

Pasar
sumber
4
+1. Saya pikir proyek awal harus menjadi proyek yang berisi string koneksi. Ini masalah saya. Terima kasih atas saran Anda untuk proyek Startup.
Tchaps
4

Pastikan string koneksi Anda dalam format ini:

server = FOOSERVER; database = BLAH_DB; pooling = false; Hubungkan Timeout = 60; Keamanan Terpadu = SSPI;

Jika string Anda tidak memiliki servertag maka metode akan kembali dengan kesalahan ini.

DBNoob
sumber
4

Saya memiliki masalah yang sama. Situs lokal berjalan dengan baik, tetapi pada biru langit itu akan gagal dengan pesan di atas.

Ternyata masalahnya adalah mengatur connectionstring di ctor, seperti ini:

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

Tidak berfungsi, ini akan:

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

Mengalahkan saya ..

Flores
sumber
Ini adalah perbaikan yang aneh tetapi hanya menyelamatkan hidup saya juga. Sebagai catatan, "db" adalah nama kunci dari string koneksi Anda dalam file konfigurasi (milik saya bukan "db")
mike
Memperbaikinya untuk saya juga. Saya memiliki connectionstring yang valid tetapi pengaturan secara manual melemparkan "Format string inisialisasi tidak sesuai dengan spesifikasi mulai dari indeks 0".
Sardaukar
4

Periksa string koneksi Anda seperti saya lupa menambahkan services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

Itu menyebabkan kesalahan dan di sini ketika saya menambahkan Configuration.GetConnectionString, maka itu memecahkan masalah

seperti sekarang koneksinya adalah:

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

berfungsi dengan baik (Masalah ini dipecahkan untuk .net core)

pengguna8099291
sumber
3

Merujuk jalur sp lengkap menyelesaikan masalah ini untuk saya:

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

Saya memiliki kesalahan yang sama. Dalam kasus saya, ini karena saya tidak memiliki kutipan penutup untuk kata sandi dalam string koneksi.

Berubah dari ini

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

Untuk

<add name="db" connectionString="server=local;database=dbanme;user id=dbuser;password='password'" providerName="System.Data.SqlClient" />
Amer Bashoeb
sumber
Harap tulis beberapa kode sampel atau sesuatu yang lain untuk menjadikan jawaban Anda sempurna. Satu baris tidak menjelaskan semuanya
Manish Kumawat
Tentu. Edit jawaban saya di atas.
Amer Bashoeb
1

Ini juga terjadi ketika Anda menyalin halaman web dari satu solusi ke yang lain, kemudian Anda menjalankan solusi Anda dan mengetahui bahwa ia memiliki nama string koneksi yang berbeda di webconfig. Kemudian Anda dengan sembarangan mengubah nama string koneksi di panel properti di tampilan desain halaman.

Lebih baik hanya mengubahnya di bagian kode daripada desain.

Gellie Ann
sumber
1

Masalah saya adalah saya menambahkan kode logging basis data ke konstruktor saya untuk objek DB, dan ini tampaknya menyebabkan kekacauan pada profil penyebaran biru saya.

FYI - Saya menyederhanakan contoh ini, dalam kode asli ini dimatikan dalam produksi (tetapi masih dalam kode)

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

Saya telah salah ketik dalam string koneksi saya "Database == PESitecore1_master"

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

Saya memiliki masalah yang sama dan akhirnya saya berhasil menyelesaikannya dengan cara berikut:

Masalahnya ada pada definisi string koneksi di web.config saya.

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

Di atas berfungsi sempurna secara lokal karena saya menggunakan Database lokal ketika saya mengelola pengguna dan peran. Ketika saya mentransfer aplikasi saya ke IIS, DB lokal tidak lagi dapat diakses, selain itu saya ingin menggunakan DB saya di SQL Server. Jadi saya mengubah string koneksi di atas yang setara dengan 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"/>

CATATAN: Di atas, juga, anggaplah bahwa Anda akan menggunakan SQL Server yang sama dari kotak lokal Anda (jika Anda memasukkannya ke web.config lokal Anda - itulah yang persis saya lakukan dalam kasus saya).

Andreas Venieris
sumber
1

Saya memiliki masalah yang sama, datang untuk mengetahui bahwa penyebaran ke IIS tidak mengatur string koneksi dengan benar. mereka adalah '$ (ReplacableToken_devConnection-Web.config Connection String_0)' saat melihat string koneksi situs di IIS, alih-alih string koneksi yang sebenarnya. Saya memperbarui mereka di sana, dan semua berfungsi seperti yang diharapkan

jason
sumber
bisakah Anda menjelaskannya lebih lanjut
TechnicalKeera
Saya JUGA memiliki masalah yang sama, dan menderita 3 minggu stackoverflow.com/questions/48929891/…
TechnicalKeera
1

Saya menyalin dan menempel konfigurasi string koneksi saya ke proyek pengujian saya dan mulai mengalami kesalahan ini. String koneksi berfungsi dengan baik di proyek WebAPI saya. Ini perbaikan saya.

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

Saya menghapus & quot pada akhir string koneksi dan berhasil

Dari pada

App=EntityFramework&quot;

Bekas

App=EntityFramework;

Tetapkan DefaultConnection seperti di bawah ini

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

Catatan: Dalam connectionString Jangan sertakan:
| x | Info metadata: "metadata = res: // * /"
| x | Kutipan yang Dikodekan: "" "

Sujay UN
sumber
0

Masalah saya bukanlah bahwa string koneksi yang saya berikan salah, atau bahwa string koneksi di app.config yang saya pikir saya gunakan salah, tetapi bahwa saya menggunakan app.config yang salah.

Jeff Dege
sumber
0

Terkadang layanan Sql Server belum dimulai. Ini dapat menghasilkan kesalahan. Pergi ke Layanan dan mulai Sql Server. Ini harus membuatnya bekerja. masukkan deskripsi gambar di sini

Claudinei Ferreira
sumber
Jika Sql Server Express belum dimulai, Anda akan mendapatkan Server Instance Exception, bukan yang dijelaskan OP dalam pertanyaannya.
noobprogrammer
0

Untuk satu jiwa malang lainnya yang mengelola aplikasi bentuk web lawas yang menggunakan sqldatasource inline, bersama dengan string koneksi yang disimpan di web.config, maka Anda mungkin mendapatkan kesalahan ini jika Anda mengakses string koneksi Anda seperti <% APSDataConnectionString%> alih-alih < % $ ConnectionStrings: MyConnectionString%>. Ini terjadi pada kami saat memutakhirkan .NET dari 3,5 menjadi 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
sumber
0

Dalam kasus saya masalahnya adalah pada server, file appsettings.json berbeda digunakan oleh aplikasi.

AGuyCalledGerald
sumber
0

Dalam kasus saya, saya mendapat kesalahan serupa:

Pengecualian ditangani oleh aplikasi. System.ArgumentException: Format string inisialisasi tidak sesuai dengan spesifikasi mulai dari indeks 91.

Saya mengubah string koneksi saya dari:

Server = .; Database = dbname; ID Pengguna = myuserid; Kata Sandi = mypassword "

untuk:

Server = .; Database = dbname; ID Pengguna = myuserid; Kata Sandi = 'mypassword' "

dan itu berhasil, saya menambahkan tanda kutip tunggal ke kata sandi.

YuKeung
sumber
0

Saya memiliki kesalahan ini juga dan dapat menyelesaikannya sebagai berikut: Saya sebelumnya menulis connectionstring ke appsettings.json menjadi bagian yang saya buat (ConnectionsStrings (perhatikan "s" ekstra) dan mencoba untuk terhubung ke database saya yang menyebabkan kesalahan. Itu adalah aplikasi ASP.NET CORE dan jadi saya ingin menyambungkannya dengan .GetConnectionString Method (perinciannya di sini ). Tampaknya metode ini secara implisit mencari sambungan tali pada bagian "ConnectionStrings", yang tidak ada. Ketika saya mengubahnya / mengoreksi ke "ConnectionStrings" itu berfungsi seperti yang diharapkan.

tidak mengerti
sumber
0

Seperti yang Saya Ketahui, setiap kali Anda memiliki lebih dari 1 string koneksi dalam solusi Anda (proyek Anda saat ini, proyek startup, ...), Anda mungkin menghadapi kesalahan ini

tautan ini dapat membantu Anda mengklik

aseman arabsorkhi
sumber