14

次のように web.config に接続文字列がある場合 (読みやすくするために改行を追加):

<add 
name="conn" 
connectionString="Data Source=(localdb)\v11.0; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/>

接続は機能し、データベース エクスプローラーでデータベースに接続できます。

コードで接続文字列を指定するか、ConfigurationManager を使用して取得すると、機能しません。

    SqlCommand command = new SqlCommand();
    command.CommandText = "select ...";
    command.CommandType = CommandType.Text;
    SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
        "Initial Catalog=MyDB; Integrated Security=True; "+
        "MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");
    command.Connection = cn;
    cn.Open();
    DataTable dataTable = new DataTable();
    SqlDataReader reader;
    reader = command.ExecuteReader();
    dataTable.Load(reader);
    cn.Close();

web.config から接続文字列を取得すると、同じエラーが発生します。

SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings
 ["conn"].ConnectionString;

私が得ているエラーは「System.ComponentModel.Win32Exception:ネットワークパスが見つかりませんでした」です

トレースには次のように書かれています:

SQL Server への接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: 名前付きパイプ プロバイダー、エラー: 40 - SQL Server への接続を開けませんでした)]

これを解決するための助けが必要です。これを何時間も解決しようとしてきましたが、ネットワーク設定を確認する必要があるというオンラインの提案があります (SQL Server Express のローカル インスタンスに接続しているため、適用されません)。サーバー名 (VS Express では同じ文字列が機能しますが、実行中のコードでは機能しません)。

認証の問題でしょうか?もしそうなら、なぜ非有益なエラーですか?

私の投稿を読んでくれてありがとう。これで私を助けてくれることを願っています。

アップデート:

私は次のことを試しました:

グループ全員に、mdf ファイルと ldf ファイルに対する完全なアクセス許可を与える

Web の下のプロジェクト プロパティで、VS 開発サーバーとローカル IIS Web サーバー (IIS Express) の下でプロジェクトを実行しようとしました

「ASP.NET empty Web Application」で作成されたプロジェクトにコードをコピーすると、うまく接続できません。

4

8 に答える 8

14

db ファイル名は適切にエスケープしましたが、データソースはエスケープしていないため、(ほとんどの場合) 存在しない "(localdb)11.0" という名前のデータソースに接続しようとします。

次のように適切にエスケープしてみてください。

SqlConnection cn = new SqlConnection("Data Source=(localdb)\\v11.0;"+
"Initial Catalog=MyDB; Integrated Security=True; "+
"MultipleActiveResultSets=True; AttachDbFilename=D:\\Products.mdf");
于 2013-04-10T11:47:54.047 に答える
8

この問題は、.net バージョン 4.0 で実行されていないアプリケーションに関連していました。

次のページによると: http://www.connectionstrings.com/sql-server-2012#sqlconnection

名前付きパイプを使用するには、.net 4.0 以降が必要です。

Server=(localdb) 構文は、4.0.2 より前の .NET Framework バージョンではサポートされていません。ただし、名前付きパイプ接続は、4.0.2 より前のアプリケーションを LocalDB インスタンスに接続するために機能します。

SqlLocalDB.exe create MyInstance
SqlLocalDB.exe start MyInstance
SqlLocalDB.exe info MyInstance

情報は名前付きパイプを提供し、これは接続文字列で使用できます。

<add name="conn" 
providerName="System.Data.SqlClient" 
connectionString="Server=np:\\.\pipe\LOCALDB#B1704E69\tsql\query"/>
于 2013-04-17T07:52:11.380 に答える
3

(localdb) を使用する代わりに、'.\SQLExpress;' を使用してみましたか? MSDNのこのページあたり?デフォルトのインスタンスを使用しますが、これは必要なものではない可能性があります。

次のようになります。

<add 
name="conn" 
connectionString="Provider=SqlClient;Data Source=.\\SQLExpress; Initial 
    Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True; 
    AttachDbFilename=D:\Products.mdf" 
providerName="System.Data.SqlClient"/>
于 2013-04-16T16:05:11.893 に答える
1

これは Web サイト プロジェクトであるため、ビルドする正しい .net フレームワーク バージョンを指定する必要があります。SqlLocalDb には .net フレームワーク 4 が必要です。

Web プロジェクトを作成し、それに Web サイトのソース ファイルを追加すると、.net フレームワークが 4+ であれば機能します。Web サイトを開くと、デフォルトのターゲット フレームワークまたは既存の dll フレームワークが同じでなく、.net 3.5 である可能性があるため、このエラーが発生します。

ここに画像の説明を入力

于 2013-04-16T13:28:59.810 に答える
1

(localdb) put a period の代わりに笑い声を上げてください'.'。次のように見えるように

Data Source=.\v11.0;

それが機能するかどうかは驚きですが、完全な SQL でそれを行うことができます。

于 2013-04-15T18:25:14.140 に答える
0

また...これはIISの設定に関連している可能性があります。

Web サイト (セッション状態) は、セッションに SQL Server を使用するように設定できます。そこもチェックしてください...この問題が発生したばかりで、sqlbox接続が変更され、IISで更新するのを忘れていることに気付きました。

于 2014-03-20T16:54:21.350 に答える
0

このエラーは、 C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATAディレクトリを圧縮した後に表示されました。解凍するとエラーが修正されました。

于 2015-04-21T21:08:15.723 に答える