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

151

У меня есть приложение ASP.NET, которое отлично работает на моей локальной машине разработки.

Когда я запускаю это приложение онлайн, оно показывает следующую ошибку:

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

Почему это появляется и как это исправить?

GS Bhangal
источник
1
Вы, вероятно, делаете плохой вызов / соединение sql. Если вы погуглите blogs.msdn.com/b/jongallant/archive/2009/05/02/…
Аристос
1
Ответ, получивший наибольшее количество голосов на stackoverflow.com/questions/9040266/… кажется более точным, чем ответ, получивший наибольшее количество голосов здесь: хотя строка подключения, которую вы используете в разработке, может работать, при публикации необходимо предоставить другую строку подключения, подходящую для производства, и это может потерпеть неудачу. Например, человек, задавший этот вопрос, обнаружил, что соединение было "$ (ReplacableToken_mcn-Web.config Connection String_0)", что указывает на то, что замена, которая должна была произойти как часть публикации, не произошла.
divega

Ответы:

190

Проверьте строку подключения. Если вам нужна помощь, проверьте строки подключения , в которых есть список наиболее часто используемых.

Обычно используемые строки подключения:

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;
Ханлет Эсканьо
источник
10
Моя проблема не связана с неправильным ConnectionString. Я могу подключиться со своей машины разработчика к производственной базе данных и использовать ее. Когда я развертываю те же настройки, я получаю эту ошибку. Вы знаете, что может пойти не так? Спасибо
Денис Бесич
3
С Денисом могло быть много чего. Во-первых, находится ли ваш сервер и ваша машина разработчика в одной сети? Какой логин вы используете? Вы используете какой-либо прокси, находитесь ли вы за брандмауэром на prod-сервере? Попадаются в какой-нибудь VPN?
Hanlet Escaño,
2
Я не уверен, кто несет ответственность, это Visual Studio, инструмент для веб-развертывания или хостинг smarterasp.net. Когда приложение было развернуто, что-то изменило мою строку подключения. Я получил доступ непосредственно к web.config и вручную обновил его, и он работает. Спасибо, что уделили время +1;)
Денис Бесич
Не работает, я попытался поставить правильную строку подключения.
Кто-нибудь видит этот вопрос? stackoverflow.com/questions/46167682/…
20

Это может кому-то помочь ... Мой пароль содержал точку с запятой, поэтому столкнулся с этой проблемой. Поэтому добавил пароль в кавычки. Это была действительно глупая ошибка.

Я изменил следующее:

<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" />
Абдул Рехман Сайед
источник
Да, это была моя проблема с моим паролем; поэтому добавление '' решило это
12

Установите проект, содержащий ваш DbContextкласс, как запускаемый проект.

Я получал эту ошибку при звонке enable-migrations. Даже если Package Manager Consoleя выбрал правильный вариант Default project, он все равно просматривал файл web.config этого запускаемого проекта, в котором не было строки подключения.

Mart
источник
4
+1. Я думаю, что начальным проектом должен быть проект, содержащий строку подключения. Это была моя проблема. Спасибо за предложение стартап-проекта.
Tchaps
4

Убедитесь, что ваша строка подключения имеет следующий формат:

server = FOOSERVER; database = BLAH_DB; pooling = false; Время ожидания подключения = 60; Встроенная безопасность = SSPI;

Если в вашей строке отсутствует serverтег, метод вернется с этой ошибкой.

DBNoob
источник
4

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

оказывается, проблема заключалась в установке строки подключения в ctor, например:

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

НЕ работает, это будет:

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

Бьет меня ..

Флорес
источник
Это такое странное решение, но оно тоже спасло мне жизнь. Для записи, «db» - это имя ключа строки подключения в файле конфигурации (у меня не было «db»)
Майк
Исправил это и для меня. У меня была допустимая строка подключения, но установка ее вручную вызвала ошибку «Формат строки инициализации не соответствует спецификации, начиная с индекса 0».
Сардаукар,
4

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

Это вызывает ошибку, и здесь, когда я добавляю Configuration.GetConnectionString, она решает проблему

как сейчас соединение:

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

работает нормально (эта проблема решена для ядра .net)

user8099291
источник
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" />
Амер Башиб
источник
Напишите пример кода или что-нибудь еще, чтобы ваш ответ был идеальным. Одна строчка не объясняет всего
Маниш Кумават
Конечно. Отредактировал мой ответ выше.
Amer Bashoeb
1

Это также происходит, когда вы копируете веб-страницу из одного решения в другое, затем вы запускаете свое решение и обнаруживаете, что у него другое имя строки подключения в webconfig. Затем вы небрежно меняете имя строки подключения на панели свойств в режиме просмотра страницы.

Лучше просто изменить это в коде, а не в дизайне.

Джелли Энн
источник
1

Моя проблема заключалась в том, что я добавил код ведения журнала базы данных в свой конструктор для объекта БД, и это, похоже, вызвало хаос в моем профиле развертывания Azure.

К вашему сведению - я упростил этот пример, в реальном коде это было отключено в производстве (но все еще в коде)

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 Server из своего локального ящика (в случае, если вы включите его в свой локальный файл 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" />

Примечание. В connectionString не включайте:
| x | Информация о метаданных: "metadata = res: // * /"
| x | Закодированные цитаты: "" "

Суджай ООН
источник
1

В моем случае возникла аналогичная ошибка:

Приложение создало необработанное исключение. System.ArgumentException: формат строки инициализации не соответствует спецификации, начиная с индекса 91.

Я меняю строку подключения с:

Сервер = .; База данных = dbname; Идентификатор пользователя = myuserid; Пароль = mypassword "

кому:

Сервер = .; База данных = dbname; Идентификатор пользователя = myuserid; Пароль = 'mypassword' "

и он работает, я добавил к паролю одинарные кавычки.

YuKeung
источник
Спасибо, помогли!
Никола Петрович
0

Моя проблема заключалась не в том, что строка подключения, которую я предоставлял, была неправильной или что строка подключения в app.config, которую я думал, что я использовал, была неправильной, а что я использовал неправильный app.config.

Джефф Деге
источник
0

Иногда служба Sql Server не запускается. Это может вызвать ошибку. Перейдите в Сервисы и запустите Sql Server. Это должно заставить его работать. введите описание изображения здесь

Клаудини Феррейра
источник
Если Sql Server Express не запущен, вы получите исключение экземпляра сервера, а не тот, который OP описал в его вопросе.
нубпрограммист
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.

AGuyCalledGerald
источник
0

У меня тоже была эта ошибка, и я смог ее решить следующим образом: я ранее записал строку подключения в appsettings.json в созданный мной раздел (ConnectionsStrings (обратите внимание на дополнительные буквы "s") и попытался подключиться к моей базе данных, что вызвало ошибка. Это было приложение ASP.NET CORE, поэтому я хотел подключиться к нему с помощью метода .GetConnectionString (подробности здесь ). Кажется, что этот метод неявно ищет строку подключения в разделе «ConnectionStrings», что не не существует. Когда я изменил / исправил его на "ConnectionStrings", он работал, как ожидалось.

невежественный
источник
0

Насколько я знаю, всякий раз, когда у вас есть более 1 строки подключения в вашем решении (ваш текущий проект, запускаемый проект, ...), вы можете столкнуться с этой ошибкой.

эта ссылка может помочь вам нажать

Асеман Арабсорхи
источник