34

Visual Studio 2010 Web サイトのデバッグ中に次のエラーが発生します。

ファイル C:\Users...\Desktop\Dpp2012New\App_Data\dppdatabase.mdf の自動命名データベースをアタッチしようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開くことができないか、ファイルが UNC 共有にあります。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Data.SqlClient.SqlException: ファイル C:\Users...\Desktop\Dpp2012New\App_Data\dppdatabase.mdf の自動名前付きデータベースを接続しようとして失敗しました。同じ名前のデータベースが存在するか、指定されたファイルを開くことができないか、ファイルが UNC 共有にあります。

my からの接続文字列は次のweb.configとおりです。

<connectionStrings>
    <add name="ApplicationServices" 
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" 
         providerName="System.Data.SqlClient"/>
    <add name="ConnectionString" 
         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\dppdatabase.mdf;Integrated Security=SSPI" 
         providerName="System.Data.SqlClient"/>
</connectionStrings>

そして、私は自分のウェブサイトから次のようにアクセスします。

Dim connectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString

スタック トレースは、エラー行を次のように示します。

 Dim conn As New SqlConnection(connectionString)
 Dim dr As SqlDataReader
 conn.Open() 'This is the error line as per stacktrace

上記のフォルダーに必要な権限を付与したので、「または指定されたファイルを開くことができません」という問題は発生しません。このフォーラムで同じエラーに関連するすべての投稿を見ると、明らかにこのエラーの深さがわかります。ただし、どのソリューションも私の問題を解決しません。私が試したリソースのいくつかは次のとおりです。

  1. http://weblogs.asp.net/scottgu/archive/2005/08/25/423703.aspx
  2. http://blogs.msdn.com/b/webdevelopertips/archive/2010/05/06/tip-106-did-you-know-how-to-create-the-aspnetdb-mdf-file.aspx
  3. http://forums.asp.net/t/1033225.aspx

解決を心待ちにしています。

4

24 に答える 24

36

私もこの問題を抱えていて、それは苦痛でした。接続文字列を構成し、なんとか問題を解決しました。接続文字列で、AttachDbFilename プロパティの値 |DataDirectory|\dbfilename.mdf をファイルへのパスに置き換えました。|データディレクトリ| データベース ファイルが同じプロジェクト内の App_Data フォルダーにある場合にのみ使用できます。

そのため、AttachDbFilename プロパティを mdf ファイルの直接パスに変更すると、問題が修正されました。

AttachDbFilename=C:\MyApp\App\DAL\db.mdf

これがうまくいくことを願っています。

于 2013-02-08T18:34:12.320 に答える
10

以下のように接続文字列を作成してみてください。

 <add name="ECommerce" connectionString="Data Source=(localdb)\v11.0;Initial Catalog=C:\USERS\dL\DESKTOP\DATABASE\MYSHOP.MDF;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=False" providerName="System.Data.SqlClient"/>

それは私のために働いています。

于 2014-01-15T15:24:36.833 に答える
4

同様のエラーが発生しましたが、構成ファイルではなくコードで構成された接続を使用しています。私にとっての解決策は、単に「初期カタログ=MyDatabase」部分を追加することでした。私のコードは次のようになります...

DbConnection connection = new SqlConnection(String.Format(@"Data Source=.\SQLEXPRESS; Integrated Security=SSPI; AttachDbFilename={0}; User Instance=True; Initial Catalog=IPDatabase;", Location));

場所は mdb ファイルへのフル パスであり、まだ存在している必要はありません。

于 2014-10-14T08:26:50.077 に答える
3

.NetでWebアプリを開発する際の最も厄介なエラーの1つ。この問題は、1年前に行っていたプロジェクトで発生しました。これが私にとってうまくいったことです。saアカウントを使用してSQLManagementStudioにログインし、データベースをオブジェクトエクスプローラーにアタッチしました([データベース]->[右クリック]->[アタッチ])。次に、[セキュリティ]->[ログイン]->[myWindowsUsername]を開き、[ユーザーマッピング]タブを編集して、接続されているデータベースに対する所有者の権限を付与しました。

Management Studioがなくても、コンソールコマンドを使用してこれらのことを実行できると確信していますが、T-SQLはあまり得意ではなく、アドバイスを提供することはできません。

于 2012-09-24T13:45:55.370 に答える
2

私はEFコードファーストのプロジェクトで、ファイルが削除されたときに表示されます。パッケージ マネージャー コンソールから実行Update-Databaseすると、DB とその問題がなくなります。

于 2016-01-22T12:03:00.587 に答える
1

web-config ファイルを確認してください。同じ名前の接続文字列が複数ある可能性があります

于 2012-09-24T13:28:38.863 に答える
0

これを変更した後、エラーが修正されました

ConfigurationManager.ConnectionStrings[0].ConnectionString

これに

ConfigurationManager.ConnectionStrings["myconnection"].ConnectionString
于 2014-10-23T11:44:12.327 に答える
0

ほとんどの場合、単体テスト プロジェクトはメイン プロジェクトから分離されています。これにより、データベースがソリューションに対してローカルである場合、app_data フォルダーが見つからないため、生成された接続文字列が無効になります。

|DataDirectory| を置き換えるだけです。単体テスト プロジェクトから接続する必要がある場合は、メイン プロジェクトのデータベースへの相対パスを使用します。

于 2016-10-21T08:12:39.223 に答える
0

理由は、データベース ディレクトリに同じ名前の .mdf ファイルが含まれているためだと思います。したがって、最善の方法は、AttachDbFilename を置き換えるだけのフル パスを指定することです。データベース ファイルのフルパスを取得し、それを app.config ファイルにある AttachDbFilename に割り当てるだけです。

于 2015-12-21T20:00:05.897 に答える
0

TLDR: 私の場合、App.config や Settings.Designer など、複数のファイルで HasanG が述べたように、変更を加える必要がある場合があります。

HasanG の回答に追加するには、ConnectionString のパスを変更する必要がある場所が複数ある場合があります。私の場合、デバッガーの 2 つの実行間でデータの永続性が得られず、Settings.Designer ファイルで定義された ConnectionString を変更すると、これが修正されました。ただし、Visual Studio を閉じて再度開き、デバッガーを再度実行した後、Visual Studio を閉じた後、永続性が得られないことがわかりました。空の DataGridView になるか、ビルド時に次のようなエラーが発生します。

*An attempt to attach an auto-named database for file <database file path in debug folder> failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share.*

次に、プロジェクト ソリューション全体でそのファイル パスのインスタンスを検索したところ、それが App.config ファイルでも使用されていることがわかりました。そのファイルと Settings.Designer ファイルのパスを変更すると、デバッガーの複数回の実行間、および Visual Studio 自体の複数回の実行間で、DataGridView にデータの永続性を持たせることができました。これが誰かを助けることを願っています! 私はこれでたくさんの髪を引っ張りました。

編集: その 3 つのファイルを作成します。Settings.Settings ファイルも更新する必要がありました。

于 2020-01-07T20:43:07.973 に答える
-1

私は同じ問題を抱えていました。接続文字列で、接続文字列が次のようになっていることを確認してください。

<connectionStrings>
  <add name="ApplicationServices"
    connectionString="data source=.\SQLEXPRESS;
                      Integrated Security=SSPI;
                      AttachDBFilename=|DataDirectory|\aspnetdb.mdf;
                      User Instance=true"
    providerName="System.Data.SqlClient" />
  <add 
    name="NorthwindConnectionString1" 
    connectionString="Data Source=localhost;
                      Initial Catalog=Northwind;
                      Integrated Security=True" 
    providerName="System.Data.SqlClient" />
</connectionStrings> 

さて、最初の

<add 
  name="ApplicationServices" 
  connectionString="data source=.\SQLEXPRESS;
                    Integrated Security=SSPI;
                    AttachDBFilename=|DataDirectory|\aspnetdb.mdf;
                    User Instance=true"
  providerName="System.Data.SqlClient" />

は、web.config にデフォルトで表示されるものです。そのままにして、別の接続文字列を追加します

 <add
   name="NorthwindConnectionString1" 
   connectionString="Data Source=localhost;
                     Initial Catalog=Northwind;
                     Integrated Security=True"
   providerName="System.Data.SqlClient" />

あなたのパラメータで。これは私のために働いています。それが役に立てば幸い。

于 2013-01-03T01:07:16.020 に答える