Формат рядка ініціалізації не відповідає специфікації, що починається з індексу 0


142

У мене є програма ASP.Net, яка добре працює на моїй локальній машині розвитку.

Коли я запускаю цю програму в Інтернеті, вона показує таку помилку

Формат рядка ініціалізації не відповідає специфікації, що починається з індексу 0


1
Ви, ймовірно, здійснюєте поганий дзвінок / з'єднання sql. Якщо ви google it 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;

Oracle

Використання TNS

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

Використання інтегрованої безпеки

Data Source=TORCL;Integrated Security=SSPI;

Використання ODP.NET без 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
Моя проблема не пов'язана з неправильним ConnectionString. Я в змозі підключитися від моєї машини розробника до виробництва db і використовувати його. Коли я розгортаю ті самі налаштування, я отримую цю помилку. Чи маєте ви уявлення, що може піти не так? Спасибі
Денис Бешич

3
Денис може статися багато чого. По-перше, чи ваш сервер та ваша машина розробників в одній мережі? Який логін ви використовуєте? Чи використовуєте ви будь-який проксі-сервер, чи не за брандмауером на сервері prod? Ви потрапляєте в будь-яку VPN?
Ганлет Есканьо

2
Я не впевнений, хто несе відповідальність, це Visual Studio, інструмент для розгортання веб-сторінок чи розміщення smarterasp.net. Коли програма була розгорнута, щось змінило мою лінію зв’язку. Я отримав доступ безпосередньо до web.config і вручну оновив його, і він працює. Дякуємо за ваш час з +1;)
Денис Бешич

Це не працює, я спробував поставити правильний рядок з'єднання.

Хтось може бачити це питання? 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" />

Так, це моя проблема, щоб мій пароль мав: тому додавання '' вирішило це
Клаудіо

11

Встановіть проект, що містить ваш DbContextклас, як проект запуску.

Я отримував цю помилку під час дзвінка enable-migrations. Навіть якщо в Package Manager Consoleя вибрав потрібний Default project, він все ще дивився на файл web.config цього проекту запуску, де рядок з'єднання не було.


4
+1. Я думаю, що стартовим проектом повинен бути проект, який містить рядок з'єднання. Це була моя проблема. Дякуємо за Вашу пропозицію щодо запуску проекту.
Чапс

4

Переконайтеся, що ваш рядок з'єднання у такому форматі:

сервер = FOOSERVER; база даних = BLAH_DB; пул = хибний; підключення тайм-аут = 60; інтегрована безпека = SSPI;

Якщо у вашому рядку відсутній serverтег, метод повернеться із цією помилкою.


4

У мене була така ж проблема. Локально сайт працював нормально, але в лазурі він не вдасться із повідомленням, поданим вище.

Виявляється, проблемою було встановлення шнура підключення в ctor:

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

НЕ працює, це:

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

Биє мене ..


Це таке дивне виправлення, але просто врятувало і моє життя. Для запису "db" - це назва ключа вашої рядка з'єднання у файлі config (у мене не було "db")
mike

Виправлено це і для мене. У мене був дійсний stringstring, але встановивши його вручну, кинув "Формат рядка ініціалізації не відповідає специфікації, що починається з індексу 0".
Сардаукар

4

Перевірте рядок підключення, як я забув додати services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

Це викликає помилку, і ось коли я додаю Configuration.GetConnectionString, то це вирішує питання

як зараз з'єднання:

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

добре працює (Ця проблема вирішена для .net core)


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

Звичайно. Редагував мою відповідь вище.
Амер Башоев

1

Це також відбувається, коли ви копіюєте веб-сторінку з одного рішення в інше, тоді ви запускаєте рішення і з’ясовуєте, що воно має іншу назву рядка з'єднання в webconfig. Тоді ви необережно змінюєте назву рядка з'єднання на панелі властивостей у дизайнерському вікні сторінки.

Краще просто змінити його в кодовій частині замість дизайну.


1

Моя проблема полягала в тому, що я додав код реєстрації бази даних до свого конструктора для об’єкта DB, і це, здавалося, спричинило хаос у моєму профілі розгортання лазуру.

FYI - я спростив цей приклад, у реальному коді це було вимкнено у виробництві (але все ще в коді)

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

1

Я мав помилку в моїх рядках з'єднання "База даних == 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, локальна БД була недоступною, крім того, я хотів би використовувати свою БД у SQL Server. Тому я змінюю вищезазначений рядок з'єднання на такий еквівалент БД 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"/>

ПРИМІТКА. Вищенаведене, припустимо, ви будете використовувати той самий SQL-сервер у своєму локальному вікні (якщо ви включите його у свій локальний web.config - саме це я і зробив у своєму випадку).


1

У мене була така ж проблема, я з'ясував, що розгортання до IIS не встановило рядки з'єднання правильно. вони були "$ (ReplacableToken_devConnection-Web.config Connection String_0)" під час перегляду рядків з'єднання сайту в IIS, а не фактичного рядка з'єднання. Я там їх оновив, і все працювало як очікувалося


Ви можете детальніше
TechnicalKeera

Я ТАКОЖ маю те саме питання, і страждаю від 3 тижнів 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" />

Примітка: У ConneString Не включайте:
| x | Інформація про метадані: "метадані = res: // * /"
| x | Кодовані котирування: "" "


0

Моя проблема полягала не в тому, що рядок підключення, яку я надав, був неправильним, або те, що рядок підключення в app.config, я вважав, що використовую, був невірним, а в тому, що я використовував неправильну app.config.


0

Іноді послуга сервера Sql не була запущена. Це може призвести до помилки. Перейдіть до Служб та запустіть сервер Sql. Це має змусити його працювати. введіть тут опис зображення


Якщо Sql Server Express не запущений, ви отримуєте Виняток екземпляра сервера, а не той, який ОП описав у своєму запитанні.
noobprogrammer

0

Для тієї іншої нещасної душі, яка керує застарілим додатком веб-форм, який використовує вбудований sqldatasource, а також рядки з'єднання, що зберігаються у web.config, ви можете отримати цю помилку, якщо ви отримаєте доступ до рядка з'єднання, як <% 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; ідентифікатор користувача = мійсерид; пароль = мій пароль "

до:

Сервер =; База даних = dbname; ідентифікатор користувача = мійсерид; пароль = 'мій пароль' "

і це працює, я додав до пароля одинарні лапки.


0

У мене була і ця помилка, і я зміг її вирішити наступним чином: раніше я записав stringstring до appsettings.json в розділ, який я створив (ConnectionsStrings (помічаю додаткові "s") і намагався підключитися до моєї бази даних, яка спричинила Помилка. Це була програма ASP.NET CORE, і тому я хотів з'єднатись із нею методом .GetConnectionString (детальніше про це тут ). Схоже, цей метод неявно шукає з'єднання- рядок у розділі "ConnectionStrings", який не зробив Коли я змінив / виправив його на "ConnectionStrings", він працював як очікувалося.


0

Як я знаю, щоразу, коли у вашому рішенні є більше 1 рядка підключення (ваш поточний проект, проект запуску, ...), ви можете зіткнутися з цією помилкою

це посилання може допомогти вам натиснути

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.