Le format de la chaîne d'initialisation n'est pas conforme à la spécification commençant à l'index 0


142

J'ai une application ASP.Net qui fonctionne bien sur ma machine de développement locale.

Lorsque j'exécute cette application en ligne, elle affiche l'erreur suivante

Le format de la chaîne d'initialisation n'est pas conforme à la spécification commençant à l'index 0


1
Vous faites probablement un mauvais appel / connexion SQL. Si vous recherchez sur google blogs.msdn.com/b/jongallant/archive/2009/05/02/…
Aristos

1
La réponse la plus votée sur stackoverflow.com/questions/9040266/… semble être plus précise que la plus votée ici: bien que la chaîne de connexion que vous utilisez dans le développement puisse fonctionner, la publication doit fournir une chaîne de connexion différente appropriée pour la production, et cela peut échouer. Par exemple, la personne qui a posé cette question a trouvé que la connexion était "$ (ReplacableToken_mcn-Web.config Connection String_0)", ce qui indique que le remplacement qui aurait dû se produire dans le cadre de la publication n'a pas eu lieu.
divega

Réponses:


183

Vérifiez votre chaîne de connexion. Si vous avez besoin d'aide, vérifiez les chaînes de connexion , qui contient une liste des chaînes couramment utilisées.

Chaînes de connexion couramment utilisées:

SQL Server 2012

Sécurité standard

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

Connexion fiable

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

Connexion à une instance SQL Server

La syntaxe du nom de serveur / instance utilisée dans l'option serveur est la même pour toutes les chaînes de connexion SQL Server.

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

SQL Server 2005

Sécurité standard

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

Connexion fiable

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

Connexion à une instance SQL Server

La syntaxe du nom de serveur / instance utilisée dans l'option serveur est la même pour toutes les chaînes de connexion SQL Server.

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

MySQL

la norme

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

Spécification du port TCP

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

Oracle

Utilisation de TNS

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

Utilisation de la sécurité intégrée

Data Source=TORCL;Integrated Security=SSPI;

Utiliser ODP.NET sans 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
Mon problème n'est pas lié à une mauvaise ConnectionString. Je peux me connecter de ma machine de développement à la base de données de production et l'utiliser. Lorsque je déploie les mêmes paramètres, j'obtiens cette erreur. Avez-vous une idée de ce qui pourrait mal tourner? Merci
Denis Besic

3
Il pourrait y avoir beaucoup de choses sur Denis. Premièrement, votre serveur et votre machine de développement sont-ils sur le même réseau? Quel type de connexion utilisez-vous? Utilisez-vous n'importe quel type de proxy, êtes-vous derrière un pare-feu dans le serveur prod? Vous entrez dans un VPN?
Hanlet Escaño

2
Je ne sais pas qui est responsable, s'agit-il de Visual Studio, outil de déploiement Web ou d'hébergement de smarterasp.net. Lorsque l'application a été déployée, quelque chose a changé ma chaîne de connexion. J'ai accédé directement à web.config et je l'ai mis à jour manuellement et cela fonctionne. Merci pour votre temps avec +1;)
Denis Besic

Cela ne fonctionne pas, j'ai essayé de mettre la bonne chaîne de connexion.

Quelqu'un peut-il voir cette question? stackoverflow.com/questions/46167682/…

18

Cela pourrait aider quelqu'un .. Mon mot de passe contenait un point-virgule donc était confronté à ce problème. J'ai donc ajouté le mot de passe entre guillemets. C'était vraiment une erreur stupide.

J'ai changé ce qui suit:

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

Oui, c'était mon problème car mon mot de passe avait un; alors en ajoutant le `` résolu le problème
Claudio

12

Définissez le projet contenant votre DbContextclasse comme projet de démarrage.

J'obtenais cette erreur en appelant enable-migrations. Même si dans le Package Manager Consolej'ai sélectionné le bon Default project, il regardait toujours le fichier web.config de ce projet de démarrage, où la chaîne de connexion n'était pas présente.


4
+1. Je pense que le projet de départ devrait être le projet qui contient la chaîne de connexion. C'était mon problème. Merci pour votre suggestion de projet de démarrage.
Tchaps le

4

Assurez-vous que votre chaîne de connexion est dans ce format:

serveur = FOOSERVER; base de données = BLAH_DB; pooling = false; délai de connexion = 60; sécurité intégrée = SSPI;

Si votre chaîne ne contient pas la serverbalise, la méthode retournera avec cette erreur.


4

J'ai eu le même problème. Localement, le site fonctionnait bien, mais sur azur, il échouerait avec le message ci-dessus.

s'avère que le problème était de définir la chaîne de connexion dans le ctor, comme ceci:

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

NE FONCTIONNE PAS, cela va:

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

Me bat..


C'est une solution si étrange mais qui m'a aussi sauvé la vie. Pour mémoire, "db" est le nom de la clé de votre chaîne de connexion dans le fichier de configuration (le mien n'était pas "db")
mike

Correction de ça pour moi aussi. J'avais une chaîne de connexion valide mais en la définissant manuellement, le "format de la chaîne d'initialisation n'est pas conforme à la spécification commençant à l'index 0".
Sardaukar

4

Vérifiez votre chaîne de connexion comme j'oublie d'ajouter services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

Cela provoque l'erreur et ici, lorsque j'ajoute Configuration.GetConnectionString, cela résout le problème

comme maintenant la connexion est:

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

fonctionne bien (ce problème est résolu pour .net core)


3

Le référencement du chemin d'accès complet a résolu ce problème pour moi:

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


2

J'ai eu la même erreur. Dans mon cas, c'était parce qu'il me manquait un guillemet de fermeture pour le mot de passe dans la chaîne de connexion.

Changé de cela

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

Veuillez écrire un exemple de code ou autre chose pour que votre réponse soit parfaite. Une ligne n'explique pas tout
Manish Kumawat

Sûr. J'ai modifié ma réponse ci-dessus.
Amer Bashoeb

1

Cela se produit également lorsque vous copiez une page Web d'une solution à une autre, que vous exécutez votre solution et que vous découvrez qu'elle a un nom de chaîne de connexion différent dans le webconfig. Ensuite, vous modifiez négligemment le nom de la chaîne de connexion dans le panneau des propriétés de la vue de conception de la page.

Mieux vaut simplement le changer dans la partie code au lieu de la conception.


1

Mon problème était que j'avais ajouté le code de journalisation de la base de données à mon constructeur pour un objet DB, et cela semblait causer des ravages sur mon profil de déploiement Azure.

FYI - J'ai simplifié cet exemple, dans le code réel, cela a été désactivé en production (mais toujours dans le code)

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

1

J'ai eu une faute de frappe dans mes chaînes de connexion "Database == PESitecore1_master"

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

1

J'ai eu le même problème et j'ai finalement réussi à le résoudre de la manière suivante:

Le problème était dans la définition de la chaîne de connexion dans mon web.config.

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

Ce qui précède fonctionnait parfaitement localement car j'utilisais une base de données locale lorsque je gérais les utilisateurs et les rôles. Lorsque j'ai transféré mon application vers IIS, la base de données locale n'était plus accessible, en plus j'aimerais utiliser ma base de données dans SQL Server. Je change donc la chaîne de connexion ci-dessus l'équivalent suivant de la base de données 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"/>

REMARQUE: ce qui précède, également, suppose que vous allez utiliser le même SQL Server à partir de votre boîte locale (au cas où vous l'incorporeriez dans votre web.config local - c'est exactement ce que j'ai fait dans mon cas).


1

J'ai eu le même problème, j'ai découvert que le déploiement sur IIS ne définissait pas correctement les chaînes de connexion. ils étaient «$ (ReplacableToken_devConnection-Web.config Connection String_0)» lors de l'affichage des chaînes de connexion du site dans IIS, au lieu de la chaîne de connexion réelle. Je les ai mis à jour là-bas, et tout a fonctionné comme prévu


pouvez-vous plz l'élaborer plus
TechnicalKeera

J'ai ÉGALEMENT le même problème et je souffre de 3 semaines de stackoverflow.com/questions/48929891/…
TechnicalKeera

1

J'ai copié et collé ma configuration de chaîne de connexion dans mon projet de test et j'ai commencé à rencontrer cette erreur. La chaîne de connexion a bien fonctionné dans mon projet WebAPI. Voici ma solution.

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

1

J'ai supprimé & quot à la fin de la chaîne de connexion et cela a fonctionné

Au lieu de

App=EntityFramework&quot;

Utilisé

App=EntityFramework;

Définissez DefaultConnection comme ci-dessous

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

Remarque: Dans connectionString, n'incluez pas:
| x | Informations sur les métadonnées: "metadata = res: // * /"
| x | Citations encodées: "" "


0

Mon problème n'était pas que la chaîne de connexion que je fournissais était fausse, ou que la chaîne de connexion dans l'app.config que je pensais utiliser était fausse, mais que j'utilisais le mauvais app.config.


0

Parfois, le service Sql Server n'a pas été démarré. Cela peut générer l'erreur. Accédez à Services et démarrez Sql Server. Cela devrait le faire fonctionner. entrez la description de l'image ici


Si Sql Server Express n'est pas démarré, vous obtenez une exception d'instance de serveur et non celle décrite par OP dans sa question.
noobprogrammer

0

Pour l'autre âme malheureuse qui gère une application Webforms héritée qui utilise une source sqldatasource en ligne, ainsi que des chaînes de connexion stockées dans web.config, vous pouvez obtenir cette erreur si vous accédez à votre chaîne de connexion comme <% APSDataConnectionString%> au lieu de < % $ ConnectionStrings: MyConnectionString%>. Cela nous est arrivé lors de la mise à niveau de .NET de 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

Dans mon cas, le problème était que sur le serveur, un fichier appsettings.json différent était utilisé par l'application.


0

Dans mon cas, j'ai eu une erreur similaire:

Une exception non gérée a été levée par l'application. System.ArgumentException: le format de la chaîne d'initialisation n'est pas conforme à la spécification commençant à l'index 91.

Je change ma chaîne de connexion de:

Serveur = .; Base de données = nombase; ID utilisateur = myuserid; Mot de passe = mon mot de passe "

à:

Serveur = .; Base de données = nombase; ID utilisateur = myuserid; Mot de passe = 'mypassword' "

et cela fonctionne, j'ai ajouté des guillemets simples au mot de passe.


0

J'ai eu cette erreur aussi et j'ai pu la résoudre comme suit: j'ai précédemment écrit la chaîne de connexion à appsettings.json dans une section que j'ai créée (ConnectionsStrings (notez les "s" supplémentaires) et j'ai essayé de me connecter à ma base de données, ce qui a causé le erreur. C'était une application ASP.NET CORE et j'ai donc voulu me connecter avec la méthode .GetConnectionString (détails à ce sujet ici ). Il semble que cette méthode recherche implicitement une chaîne de connexion dans la section "ConnectionStrings", ce qui n'a pas Quand je l'ai changé / corrigé en "ConnectionStrings", cela a fonctionné comme prévu.


0

Comme je le sais, chaque fois que vous avez plus d'une chaîne de connexion dans votre solution (votre projet actuel, projet de démarrage, ...), vous pouvez être confronté à cette erreur

ce lien peut vous aider à cliquer

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.