Định dạng của chuỗi khởi tạo không tuân theo đặc tả bắt đầu từ chỉ số 0


142

Tôi có một ứng dụng ASP.Net chạy tốt trên máy phát triển cục bộ của mình.

Khi tôi chạy ứng dụng này trực tuyến, nó hiển thị lỗi sau

Định dạng của chuỗi khởi tạo không tuân theo đặc tả bắt đầu từ chỉ số 0


1
Bạn có thể thực hiện một cuộc gọi / kết nối sql xấu. Nếu bạn google nó blog.msdn.com/b/jongallant/archive/2009/05/02/ Kẻ
Aristos

1
Câu trả lời được bình chọn nhiều nhất tại stackoverflow.com/questions/9040266/, dường như chính xác hơn câu trả lời được bình chọn nhiều nhất ở đây: mặc dù chuỗi kết nối bạn sử dụng trong phát triển có thể hoạt động, xuất bản cần cung cấp một chuỗi kết nối khác phù hợp cho sản xuất và Điều này có thể thất bại. Ví dụ: người hỏi câu hỏi đó đã tìm thấy kết nối là "$ (AlternacableToken_mcn-Web.config Connection String_0)", cho biết sự thay thế đáng lẽ đã xảy ra do một phần của việc xuất bản đã không xảy ra.
divega

Câu trả lời:


183

Kiểm tra chuỗi kết nối của bạn. Nếu bạn cần trợ giúp, hãy kiểm tra Chuỗi kết nối , trong đó có danh sách các chuỗi thường được sử dụng.

Chuỗi kết nối thường được sử dụng:

Máy chủ SQL 2012

Bảo mật tiêu chuẩn

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

Kết nối đáng tin cậy

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

Kết nối với phiên bản SQL Server

Cú pháp tên máy chủ / thể hiện được sử dụng trong tùy chọn máy chủ là giống nhau cho tất cả các chuỗi kết nối SQL Server.

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

Máy chủ SQL 2005

Bảo mật tiêu chuẩn

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

Kết nối đáng tin cậy

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

Kết nối với phiên bản SQL Server

Cú pháp tên máy chủ / thể hiện được sử dụng trong tùy chọn máy chủ là giống nhau cho tất cả các chuỗi kết nối SQL Server.

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

MySQL

Tiêu chuẩn

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

Chỉ định cổng TCP

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

Oracle

Sử dụng TNS

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

Sử dụng bảo mật tích hợp

Data Source=TORCL;Integrated Security=SSPI;

Sử dụng ODP.NET mà không có 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;

9
Vấn đề của tôi không liên quan đến kết nối sai. Tôi có thể kết nối từ máy phát triển của mình để sản xuất db và sử dụng nó. Khi tôi triển khai các cài đặt tương tự, tôi gặp lỗi này. Bạn có biết những gì có thể đi sai? Cảm ơn
Denis Besic

3
Có thể có nhiều điều đang xảy ra với Denis. Đầu tiên, máy chủ và máy dev của bạn có nằm trong cùng một mạng không? Bạn đang sử dụng loại đăng nhập nào? Bạn có đang sử dụng bất kỳ loại proxy nào không, bạn có đứng sau tường lửa trong máy chủ prod không? Đang vào bất kỳ VPN nào?
Hanlet Escaño

2
Tôi không chắc ai chịu trách nhiệm, đó là Visual Studio, Công cụ triển khai Web hay lưu trữ smarterasp.net. Khi ứng dụng được triển khai, một cái gì đó đã thay đổi chuỗi kết nối của tôi. Tôi đã truy cập trực tiếp vào web.config và cập nhật thủ công và nó hoạt động. Cảm ơn thời gian của bạn với +1;)
Denis Besic

Nó không hoạt động, tôi đã cố gắng đặt chuỗi kết nối chính xác.

Có ai có thể nhìn thấy câu hỏi này không? stackoverflow.com/questions/46167682/

18

Điều này có thể giúp ai đó .. Mật khẩu của tôi có dấu chấm phẩy vì vậy đã đối mặt với vấn đề này. Vì vậy, đã thêm mật khẩu trong dấu ngoặc kép. Đó thực sự là một sai lầm ngớ ngẩn.

Tôi đã thay đổi như sau:

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

đến

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

Có, đây là vấn đề của tôi đối với mật khẩu của tôi có một; vì vậy, thêm '' đã giải quyết nó
Claudio

11

Đặt dự án chứa DbContextlớp của bạn làm dự án khởi động.

Tôi đã nhận được lỗi này trong khi gọi enable-migrations. Ngay cả khi Package Manager Consoletôi chọn đúng Default project, nó vẫn đang xem tệp web.config của dự án khởi động đó, nơi chuỗi kết nối không có mặt.


4
+1. Tôi nghĩ rằng dự án bắt đầu nên là dự án có chứa chuỗi kết nối. Đây là vấn đề của tôi. Cảm ơn lời đề nghị của bạn về dự án Startup.
Tchaps

4

Đảm bảo rằng chuỗi kết nối của bạn ở định dạng này:

server = FOOSERVER; cơ sở dữ liệu = BLAH_DB; pooling = false; Connect Timeout = 60; Tích hợp bảo mật = SSPI;

Nếu chuỗi của bạn thiếu serverthẻ thì phương thức sẽ quay lại với lỗi này.


4

Tôi đã từng gặp vấn đề tương tự. Tại địa phương trang web chạy tốt, nhưng trên phương tiện, nó sẽ thất bại với thông báo ở trên.

Hóa ra vấn đề là thiết lập chuỗi kết nối trong ctor, như thế này:

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

KHÔNG hoạt động, điều này sẽ:

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

Đánh bại tôi ..


Đây là một sửa chữa kỳ lạ nhưng chỉ cứu cuộc sống của tôi quá. Đối với bản ghi, "db" là tên của khóa của chuỗi kết nối của bạn trong tệp cấu hình (của tôi không phải là "db")
mike

Đã sửa nó cho tôi. Tôi đã có một chuỗi kết nối hợp lệ nhưng cài đặt nó theo cách thủ công đã ném "Định dạng của chuỗi khởi tạo không tuân thủ thông số bắt đầu từ chỉ mục 0".
Sardaukar

4

Kiểm tra chuỗi kết nối của bạn như tôi quên thêm services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

Nó gây ra lỗi và ở đây khi tôi thêm Configuration.GetConnectionString, sau đó nó giải quyết vấn đề

như bây giờ kết nối là:

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

hoạt động tốt (Vấn đề này được giải quyết cho lõi .net)


3

Tham khảo đường dẫn sp đầy đủ đã giải quyết vấn đề này cho tôi:

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


2

Tôi đã có những lỗi giống nhau. Trong trường hợp của tôi, điều này là do tôi đã thiếu một trích dẫn đóng cho mật khẩu trong chuỗi kết nối.

Thay đổi từ này

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

Đến

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

Vui lòng viết một số mã mẫu hoặc một cái gì đó khác để làm cho câu trả lời của bạn hoàn hảo. Một dòng không giải thích mọi thứ
Manish Kumawat

Chắc chắn rồi. Chỉnh sửa câu trả lời của tôi ở trên.
Amer Bashoeb

1

Điều này cũng xảy ra khi bạn sao chép một trang web từ giải pháp này sang giải pháp khác, sau đó bạn chạy giải pháp của mình và phát hiện ra rằng nó có tên chuỗi kết nối khác trong webconfig. Sau đó, bạn bất cẩn thay đổi tên của chuỗi kết nối trong bảng thuộc tính trong chế độ xem thiết kế của trang.

Tốt hơn là chỉ thay đổi nó trong phần mã thay vì thiết kế.


1

Vấn đề của tôi là tôi đã thêm mã đăng nhập cơ sở dữ liệu vào hàm tạo của mình cho một đối tượng DB và điều này dường như gây ra sự tàn phá trong hồ sơ triển khai phương tiện của tôi.

FYI - Tôi đã đơn giản hóa ví dụ này, trong mã thực, nó đã bị tắt trong sản xuất (nhưng vẫn còn trong mã)

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

1

Tôi đã mắc lỗi đánh máy trong chuỗi kết nối của mình "Cơ sở dữ liệu == PESitecore1_master"

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

1

Tôi đã có cùng một vấn đề và cuối cùng tôi đã giải quyết nó theo cách sau:

Vấn đề là ở định nghĩa chuỗi kết nối trong web.config của tôi.

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

Ở trên hoạt động hoàn hảo cục bộ vì tôi đã sử dụng Cơ sở dữ liệu cục bộ khi tôi quản lý người dùng và vai trò. Khi tôi chuyển ứng dụng của mình sang IIS, DB cục bộ không thể truy cập được nữa, ngoài ra tôi muốn sử dụng DB của mình trong SQL Server. Vì vậy, tôi thay đổi chuỗi kết nối trên tương đương với SQL Server DB sau:

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

LƯU Ý: Ngoài ra, giả sử rằng bạn sẽ sử dụng cùng một Máy chủ SQL từ hộp cục bộ của mình (trong trường hợp bạn kết hợp nó vào web.config cục bộ của mình - đó chính xác là những gì tôi đã làm trong trường hợp của tôi).


1

Tôi gặp vấn đề tương tự, đã phát hiện ra rằng việc triển khai lên IIS không đặt đúng chuỗi kết nối. chúng là '$ (AlternacableToken_devConnection-Web.config Connection String_0)' khi xem các chuỗi kết nối của trang web trong IIS, thay vì chuỗi kết nối thực tế. Tôi đã cập nhật chúng ở đó, và tất cả đều hoạt động như mong đợi


bạn có thể giải thích chi tiết hơn không
TechnicalKeera

TÔI C haveNG có cùng một vấn đề và chịu đựng 3 tuần stackoverflow.com/questions/48929891/NH
TechnicalKeera

1

Tôi đã sao chép và dán cấu hình chuỗi kết nối vào dự án thử nghiệm của mình và bắt đầu gặp phải lỗi này. Chuỗi kết nối hoạt động tốt trong dự án WebAPI của tôi. Đây là sửa chữa của tôi.

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

1

Tôi đã xóa & quote ở cuối chuỗi kết nối và nó hoạt động

Thay vì

App=EntityFramework&quot;

Đã sử dụng

App=EntityFramework;

Đặt DefaultConnection như bên dưới

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

Lưu ý: Trong ConnectionString Không bao gồm:
| x | Thông tin siêu dữ liệu: "metadata = res: // * /"
| x | Báo giá được mã hóa: "" "


0

Vấn đề của tôi không phải là chuỗi kết nối tôi đang cung cấp bị sai hay chuỗi kết nối trong app.config tôi nghĩ rằng tôi đang sử dụng sai, nhưng tôi đã sử dụng app.config sai.


0

Đôi khi dịch vụ Sql Server chưa được khởi động. Điều này có thể tạo ra lỗi. Đi đến Dịch vụ và khởi động Sql Server. Điều này sẽ làm cho nó hoạt động. nhập mô tả hình ảnh ở đây


Nếu Sql Server Express chưa được khởi động, bạn sẽ nhận được Máy chủ ngoại lệ không phải là cái mà OP mô tả trong câu hỏi của anh ấy.
noobprogrammer

0

Đối với một linh hồn không may khác đang quản lý ứng dụng webforms kế thừa sử dụng sqldatasource nội tuyến, cùng với các chuỗi kết nối được lưu trữ trong web.config, thì bạn có thể gặp lỗi này nếu bạn truy cập chuỗi kết nối của mình như <% APSDataConnectionString%> thay vì <% % $ ConnectionStrings: MyConnectionString%>. Điều này đã xảy ra với chúng tôi khi nâng cấp .NET từ 3.5 lên 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

Trong trường hợp của tôi, vấn đề là trên máy chủ, một tệp appsinstall.json khác đã được ứng dụng sử dụng.


0

Trong trường hợp của tôi, tôi đã gặp một lỗi tương tự:

Một ngoại lệ chưa được xử lý đã được ném bởi ứng dụng. System.ArgumentException: Định dạng của chuỗi khởi tạo không phù hợp với đặc tả bắt đầu từ chỉ mục 91.

Tôi thay đổi chuỗi kết nối của mình từ:

Máy chủ =.; Cơ sở dữ liệu = dbname; Id người dùng = myuserid; Mật khẩu = mật khẩu "

đến:

Máy chủ =.; Cơ sở dữ liệu = dbname; Id người dùng = myuserid; Mật khẩu = 'mypassword' "

và nó hoạt động, tôi đã thêm dấu ngoặc đơn vào mật khẩu.


0

Tôi cũng gặp lỗi này và đã có thể giải quyết nó như sau: Trước đây tôi đã viết chuỗi kết nối tới appsinstall.json vào một phần mà tôi đã tạo (ConnectionsStrings (chú ý thêm "s") và cố gắng kết nối với cơ sở dữ liệu của tôi, điều này gây ra đó là một ứng dụng ASP.NET CORE và vì vậy tôi muốn kết nối với nó bằng .GetConnectionString Phương thức (chi tiết ở đây ). Có vẻ như phương thức này tìm kiếm một chuỗi kết nối trong phần "ConnectionStrings", mà không Khi tôi thay đổi / sửa nó thành "ConnectionStrings", nó hoạt động như mong đợi.


0

Như tôi biết, bất cứ khi nào bạn có nhiều hơn 1 chuỗi kết nối trong giải pháp của mình (dự án hiện tại, dự án khởi động, ...), bạn có thể phải đối mặt với lỗi này

liên kết này có thể giúp bạn nhấp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.