初期化文字列の形式がインデックス0から始まる仕様に準拠していません


142

私のローカル開発マシンで問題なく動作するASP.Netアプリケーションがあります。

このアプリケーションをオンラインで実行すると、次のエラーが表示されます

初期化文字列の形式がインデックス0から始まる仕様に準拠していません


1
あなたはおそらく悪いSQL呼び出し/接続を行います。あなたはグーグル場合は、blogs.msdn.com/b/jongallant/archive/2009/05/02/...
アリストス

1
stackoverflow.com/questions/9040266/…で最も投票された回答は、ここで最も投票された回答よりも正確であるように見えます。開発で使用する接続文字列は機能する可能性がありますが、公開では本番環境に適した別の接続文字列を提供する必要があります。これは失敗する可能性があります。たとえば、その質問をした人が接続が "$(ReplacableToken_mcn-Web.config Connection String_0)"であることを発見しました。これは、発行の一部として行われるはずの置き換えが行われなかったことを示しています。
divega

回答:


183

接続文字列を確認してください。サポートが必要な場合は、一般的に使用される接続文字列のリストがある接続文字列を確認してください。

一般的に使用される接続文字列:

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;

オラクル

TNSの使用

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

統合セキュリティの使用

Data Source=TORCL;Integrated Security=SSPI;

tnsnames.oraなしのODP.NETの使用

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とは関係ありません。開発者のマシンから本番データベースに接続して使用できます。同じ設定をデプロイすると、このエラーが発生します。何がうまくいかないか考えていますか?ありがとう
Denis Besic 2013年

3
デニスで起こっている多くのことがあり得る。まず、サーバーと開発マシンは同じネットワークにありますか?どのようなログインを使用していますか?プロキシを使用していますか、製品サーバーのファイアウォールの内側にいますか?VPNを利用していますか?
HanletEscaño2013年

2
だれが責任を負っているかはわかりませんが、それはVisual Studio、Web配置ツール、smarterasp.netのホスティングなどです。アプリケーションがデプロイされたとき、何かが私の接続文字列を変更しました。私は直接web.configにアクセスし、手動で更新して動作しました。+1を付けていただきありがとうございます;)
Denis Besic 2013年

機能していません。正しい接続文字列を入力しようとしました。

誰でもこの質問を見ることができますか?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-migrationsPackage Manager Console私が正しいを選択した場合でもDefault project、接続文字列が存在しない、そのスタートアッププロジェクトのweb.configファイルをまだ調べていました。


4
+1。開始プロジェクトは、接続文字列を含むプロジェクトである必要があると思います。これが私の問題でした。スタートアッププロジェクトの提案をありがとう。
Tchaps 2016

4

接続文字列が次の形式であることを確認してください。

server = FOOSERVER; database = BLAH_DB; pooling = false; Connect Timeout = 60; Integrated Security = SSPI;

文字列にserverタグがない場合、メソッドはこのエラーで戻ります。


4

同じ問題がありました。ローカルではサイトは問題なく動作しましたが、紺碧では上記のメッセージで失敗しました。

問題は次のようにctorに接続文字列を設定することでした:

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

動作しません、これは:

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

私を殴る..


これは奇妙な修正ですが、私の命も救いました。レコードの場合、「db」は構成ファイル内の接続文字列のキーの名前です(私のものは「db」ではありませんでした)
mike

私も修正しました。有効な接続文字列がありましたが、手動で設定すると、「初期化文字列の形式がインデックス0から始まる仕様に準拠していません」がスローされました。
Sardaukar

4

追加を忘れたように、接続文字列を確認してください services.AddDbContext<dbsContext>(options => options.UseSqlServer("Default"));

エラーが発生し、ここでを追加Configuration.GetConnectionStringすると、問題が解決します

今のように接続は:

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

正常に動作します(この問題は.netコアで解決されています)


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

回答を完全なものにするために、サンプルコードなどを書いてください。1行ですべてが説明される
わけではありません

承知しました。上記の私の答えを編集しました。
Amer Bashoeb 2017

1

これは、あるソリューションから別のソリューションにWebページをコピーし、ソリューションを実行して、webconfigで別の接続文字列名があることを確認した場合にも発生します。次に、ページのデザインビューのプロパティパネルで接続文字列の名前を不注意に変更します。

デザインではなく、コード部分を変更するだけの方が良いでしょう。


1

私の問題は、DBオブジェクトのコンストラクターにデータベースログコードを追加したことです。これにより、紺碧の配置プロファイルに混乱が生じたようです。

参考までに-私はこの例を簡略化しました、実際のコードではこれは本番環境では無効にされていました(まだコード内にあります)

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

1

接続文字列にタイプミスがありました "Database == 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に転送したときに、ローカルDBにアクセスできなくなりました。さらに、SQL Serverで自分のDBを使用したいと考えています。したがって、上記の接続文字列を次の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"/>

注:上記は、ローカルボックスから同じSQL Serverを使用することも想定しています(ローカルweb.configに組み込む場合-これは私の場合とまったく同じです)。


1

同じ問題があり、IISへの展開で接続文字列が正しく設定されていないことがわかりました。IISでサイトの接続文字列を表示すると、実際の接続文字列ではなく、「$(ReplacableToken_devConnection-Web.config Connection String_0)」でした。そこで更新しましたが、すべて期待どおりに動作しました


もっと詳しく説明してください
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 | エンコードされた引用: "" "


0

私の問題は、提供している接続文字列が間違っていることや、使用していると思っていたapp.configの接続文字列が間違っていたことではなく、間違ったapp.configを使用していることでした。


0

Sql Serverサービスが開始されていない場合があります。これによりエラーが発生する場合があります。サービスに移動し、SQL Serverを起動します。これでうまくいくはずです。 ここに画像の説明を入力してください


Sql Server Expressが開始されていない場合、OPが彼の質問で説明したものではなく、サーバーインスタンス例外が発生します。
noobprogrammer

0

インラインsqldatasourceを使用するレガシーwebformsアプリケーションと、web.configに保存されている接続文字列を管理しているもう1つの不幸な魂の場合、<の代わりに<%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;ユーザーID = myuserid;パスワード= mypassword "

に:

サーバー= .;データベース= dbname;ユーザーID = myuserid;パスワード= 'mypassword' "

それが機能し、パスワードに一重引用符を追加しました。


0

私もこのエラーがあり、次のようにそれを解決することができました:以前にappsettings.jsonへの接続文字列を、作成したセクション(ConnectionsStrings(追加の「s」に注意))に書き込み、データベースに接続しようとしたため、エラー。これはASP.NET COREアプリケーションだったので、.GetConnectionStringメソッドを使用して接続したかったのです(詳細はこちら)。このメソッドは、暗黙的に "ConnectionStrings"セクションで接続文字列を検索しているようです。存在しません。「ConnectionStrings」に変更または修正すると、期待どおりに機能しました。


0

私が知っているように、ソリューション(現在のプロジェクト、スタートアッププロジェクトなど)に複数の接続文字列がある場合は常に、このエラーに直面する可能性があります

このリンクはクリックするのに役立ち ます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.